iosios5uitextfielduitextinput

Adding a cancel button to UITextField keyboard


Is there a way to add a cancel button to the keyboard displayed for UITextField? Looking over the UITextInputTraits Protocol Reference, I could not find anything, including trying out the different keyboard types.


Solution

  • You can create a input accessory view which can display a UIToolBar Above the keyboard and then add a cancel button to this. Take a look at the documentation link below for the inputAccessoryView property.

    http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html

    This is an example of one I did for a TextView. The create Input Accessory View method is called from "textViewDidBeginEditing". Then it creates the input accessory view and in my case adds three buttons and a space bar.

    I hope that helps.

    -(void)textViewDidBeginEditing:(UITextView *)textView {
    
    [self createInputAccessoryView];
    [textView setInputAccessoryView:_inputAccessoryView];
    self.myTextView = textView;  }
    
    -(void)createInputAccessoryView {
    
    _inputAccessoryView = [[UIToolbar alloc] init];
    _inputAccessoryView.barStyle = UIBarStyleBlackOpaque;
    [_inputAccessoryView sizeToFit];
    
    _inputAccessoryView.frame = CGRectMake(0,_collageView.frame.size.height - 44, _collageView.frame.size.width, 44);
    
    UIBarButtonItem *fontItem = [[UIBarButtonItem alloc] initWithTitle:@"Font"
                                                                 style:UIBarButtonItemStyleBordered
                                                                target:self action:@selector(changeFont:)];
    UIBarButtonItem *removeItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove"
                                                                 style:UIBarButtonItemStyleBordered
                                                                target:self action:@selector(removeTextView:)];
    //Use this to put space in between your toolbox buttons
    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                              target:nil
                                                                              action:nil];
    UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                 style:UIBarButtonItemStyleDone
                                                                target:self action:@selector(dismissKeyBoard:)];
    
    NSArray *items = [NSArray arrayWithObjects:fontItem,removeItem,flexItem,doneItem, nil];
    [_inputAccessoryView setItems:items animated:YES];
    [_myTextView addSubview:_inputAccessoryView];
    }