10

有没有办法在显示的键盘上添加一个取消按钮UITextField?查看UITextInputTraits协议参考,我找不到任何东西,包括尝试不同的键盘类型。

4

3 回答 3

15

您可以创建一个输入附件视图,它可以在键盘上方显示一个 UIToolBar,然后向它添加一个取消按钮。查看以下 inputAccessoryView 属性的文档链接。

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

这是我为 TextView 所做的一个示例。从“textViewDidBeginEditing”调用创建输入附件视图方法。然后它创建输入附件视图,在我的例子中添加了三个按钮和一个空格键。

我希望这会有所帮助。

-(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];
}
于 2012-06-26T16:22:17.210 回答
1

我刚刚UIToolbar在 Interface Builder 的视图控制器中放入了一个,然后:

@property IBOutlet UIToolbar *keyboardAccessory;

-(void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // this is so I can edit it in Interface Builder, but it doesn't show in the view
    [keyboardAccessory removeFromSuperview];
}

-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField {
    textField.inputAccessoryView = keyboardAccessory;
    return YES;
}

-(IBAction) pressedCancelButton {
    [self.view endEditing:YES];
}

瞧!

于 2013-07-26T20:35:16.540 回答
0

安德鲁,怎么样?这是迪玛R!

据我所知,没有什么好方法可以做你想做的事。您可以轻松地从此处列出的一种内置类型中进行选择

typedef enum {
   UIReturnKeyDefault,
   UIReturnKeyGo,
   UIReturnKeyGoogle,
   UIReturnKeyJoin,
   UIReturnKeyNext,
   UIReturnKeyRoute,
   UIReturnKeySearch,
   UIReturnKeySend,
   UIReturnKeyYahoo,
   UIReturnKeyDone,
   UIReturnKeyEmergencyCall,
} UIReturnKeyType;

您可以做的是在包含取消按钮的键盘顶部添加一个视图,或者尝试遍历视图层次结构并以这种方式在按钮上覆盖您想要的内容(尽管这种方法不可靠)。不幸的是,这是苹果尚未提供太多定制的一件事。

编辑:实际上我认为我从一开始就误读了您的问题,因为无论如何您都不希望取消按钮作为主要的返回按钮。在这种情况下,输入附件视图绝对是要走的路。

于 2012-06-26T16:23:37.917 回答