使用 UIToolbar/UITextField 辞职第一响应者问题

Posted

技术标签:

【中文标题】使用 UIToolbar/UITextField 辞职第一响应者问题【英文标题】:Resign first responder issues with UIToolbar/UITextField 【发布时间】:2014-05-31 12:34:43 【问题描述】:

好的 - 我正在实现一个 UIToolbar,其中包含一个完成按钮到 UIKeyboardTypeDecimalPad 的文本字段。

问题是,没有调用将在文本字段上退出响应者的方法。我已经放入 NSLogs 以查看调用了什么和没有调用什么,并调用了设置(即 UIToolbar 初始化、添加按钮、将工具栏添加到文本字段等),但从未调用过该方法当按下“完成”按钮时。事实上,这个按钮甚至看起来都不是“可点击的”。

- (void) viewDidLoad

   UIToolbar *toolbar = [[UIToolbar alloc] init];
   UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePicker:)];
   UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
   [toolbar setItems:@[doneButton, spaceItem]];
   self.textField.inputAccessoryView = toolbar;


-(void)donePicker:(id)sender

   [self.textField resignFirstResponder];

我尝试使用[self.textField resignFirstResponder][self.view endEditing:YES],两者都没有结果。有什么想法吗,伙计们?

【问题讨论】:

toolbar 被添加到视图的哪个位置? 设置文本字段的委托。 好的,为了清楚起见,这里的问题是 donePicker: 方法没有被调用,对吧?我们可以消除关于键盘的整个讨论,因为实际的问题是您尝试绑定到条形按钮的方法没有被调用,对吗? @nhgrif 这就是问题所在,正确。 【参考方案1】:

这里你只需要做的是:

[yourtextfield setReturnKeyType:UIReturnKeyDone];
yourtextfield.delegate = self;

现在这个方法可以完成你的工作:

- (BOOL)textFieldShouldReturn:(UITextField *)textField

    [textField resignFirstResponder];
    return YES;

享受:)

【讨论】:

我使用的是DecimalPad 键盘类型。没有可用的返回按钮。这就是为什么我要通过UIToolbar 路线。 我试了一下;如果我使用回车键,它会在模拟时关闭键盘 - 但由于没有返回按钮,它不会在手机上关闭。

以上是关于使用 UIToolbar/UITextField 辞职第一响应者问题的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份