为多个 UITextField 使用 inputAccessoryView UIToolbar

Posted

技术标签:

【中文标题】为多个 UITextField 使用 inputAccessoryView UIToolbar【英文标题】:Using an inputAccessoryView UIToolbar for Multiple UITextField's 【发布时间】:2013-06-12 08:27:07 【问题描述】:

我有一个UIToolbar,我用数字键盘将它作为inputAccessoryView 添加到三个UITextFields。在这个UIToolbar 上,我有一个取消和完成按钮,可以根据这篇文章关闭键盘:trying to add done button to Numeric keyboard。这对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 参数。任何想法如何正确实施?

谢谢!

【问题讨论】:

【参考方案1】:

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

对你有帮助。

【讨论】:

【参考方案2】:

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

[self.view endEditing];

【讨论】:

非常酷我不知道这个!当我点击取消按钮时,它不允许我反转 UITextField 的状态,但我很高兴知道它存在。

以上是关于为多个 UITextField 使用 inputAccessoryView UIToolbar的主要内容,如果未能解决你的问题,请参考以下文章

用于完成按钮的文本字段的 swift ui 扩展

成为FirstResponder 和多个 UITextField 焦点

在多个 UITextField 的数字键盘上显示完成按钮

如何使 UITextField 只有一个文本/数字并使用 Next / Done 按钮浏览多个`UITextField`

iphone:uitextfield,具有相同委托的多个文本字段?

在单个 UITableViewCell 中管理多个 UITextField