如何在按下返回键时取消数字键盘
问题原因:在iOS 7.1中,如果键盘类型为数字键盘,则textFieldShouldReturn:方法不会被调用。
解决方法:可以使用UITextField的inputAccessoryView属性来添加一个自定义的视图作为键盘的附属视图,然后在自定义视图中添加一个按钮,点击按钮时调用resignFirstResponder方法来隐藏键盘。
具体代码如下:
- (void)viewDidLoad { [super viewDidLoad]; UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 200, 30)]; textField.borderStyle = UITextBorderStyleRoundedRect; textField.delegate = self; textField.keyboardType = UIKeyboardTypeNumberPad; textField.returnKeyType = UIReturnKeyDone; textField.inputAccessoryView = [self createInputAccessoryView]; [self.view addSubview:textField]; } - (UIView *)createInputAccessoryView { UIView *inputAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; inputAccessoryView.backgroundColor = [UIColor lightGrayColor]; UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeSystem]; dismissButton.frame = CGRectMake(inputAccessoryView.frame.size.width - 70, 0, 70, 44); [dismissButton setTitle:@"Done" forState:UIControlStateNormal]; [dismissButton addTarget:self action:@selector(dismissKeyboard) forControlEvents:UIControlEventTouchUpInside]; [inputAccessoryView addSubview:dismissButton]; return inputAccessoryView; } - (void)dismissKeyboard { [self.view endEditing:YES]; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return NO; }
以上代码中,通过设置UITextField的inputAccessoryView属性来添加一个自定义的视图作为键盘的附属视图。在自定义视图中,添加一个按钮,并设置按钮的点击事件为dismissKeyboard方法,该方法通过调用[self.view endEditing:YES]来隐藏键盘。在textFieldShouldReturn:方法中也调用了[textField resignFirstResponder]来隐藏键盘。