1

我有一个用数字键盘UIToolbar添加inputAccessoryView到三个的。UITextFields在此UIToolbar我有一个取消和完成按钮来关闭键盘,根据这篇文章:尝试将完成按钮添加到数字键盘。这对一个很有效UITextField,可以很容易地识别。但是,我正在尝试对三个使用相同的代码UITextFields。这是我所拥有的:

- (void) viewDidLoad
{
    [super viewDidLoad];

    // weight, numberOfDrinks, and drinkingDuration are UITextFields set up in Storyboard.
    // I implemented the UITextFieldDelegate protocol in the .h file and set the UITextField's delegates to the owning ViewController in Storyboard.

    self.weight.delegate = self;
    self.numberOfDrinks.delegate = self;
    self.drinkingDuration.delegate = self;
}

- (void) textFieldDidBeginEditing:(UITextField *)textField {

    UIToolbar *doneToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    doneToolbar.barStyle = UIBarStyleBlackTranslucent;

    // I can't pass the textField as a parameter into an @selector
    doneToolbar.items = [NSArray arrayWithObjects:
                         [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelKeyboard:)],
                         [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                         [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithKeyboard:)],
                         nil];

    [doneToolbar sizeToFit];

    textField.inputAccessoryView = doneToolbar;
}

- (void) cancelKeyboard: (UITextField *) textField {

    textField.text = @"";

    [textField resignFirstResponder];
}

- (void) doneWithKeyboard: (UITextField *) textField {

    [textField resignFirstResponder];
}

我收到“无法识别的选择器发送到实例”错误,因为 cancelKeyboard 和 doneWithKeyboard 方法没有被传递给他们需要的 textField 参数。任何想法如何正确实施?

谢谢!

4

2 回答 2

1

在 .h 文件 UITextField *SelectedTextField 中使用全局对象;// 在开始编辑方法中定义 SelectedTextField = textField; 然后在你的方法上使用它来辞职或展示。

这会对你有所帮助。

于 2013-06-12T08:44:14.607 回答
1

如果只是想在当前视图控制器中关闭键盘,可以调用视图控制器的 view 属性的 endEditing 方法:

[self.view endEditing];
于 2013-06-12T10:18:38.020 回答