【问题标题】:Unable to dismiss keyboard with UITextField无法使用 UITextField 关闭键盘
【发布时间】:2011-06-11 06:00:21
【问题描述】:
我无法调用 textFieldShouldEndEditing。我已经在界面生成器中重新创建了链接并尝试过,但似乎没有任何效果。知道为什么不调用它吗?
编辑
我正在实现 -textFieldShouldEndEditing 和 -textFieldDidFinishEditing。为 textField 添加委托也无济于事。我在下面使用的代码不会触发日志消息。
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
NSLog(@"Done editing...");
[textField resignFirstResponder];
return YES;
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"Done editing...");
}
【问题讨论】:
标签:
iphone
objective-c
ios4
ios-simulator
【解决方案1】:
不要使用-textFieldDidEndEditing。在文本字段辞职第一响应者之后调用它......它还没有,因为你还没有告诉它,因为该方法还没有被调用,因为第一响应者还没有被辞职,因为你没有告诉它到了呢。循环的,先有鸡还是先有蛋的问题。
你想要的委托方法是-textFieldShouldReturn。当按下“return”键时会调用它。在其中,告诉文本字段让第一响应者辞职,然后返回YES。
还在表单后面放置一个大而清晰的自定义按钮,并将其内部修饰挂钩到一个方法,该方法遍历表单中的所有文本字段并辞去每个文本字段的第一响应者。所以背景触摸也会释放键盘。
【解决方案2】:
我很久以前就看到了,我希望从那时起你能解决这个问题。每个人都告诉你正确的事情,但你必须同时照顾好所有人!让我简单介绍一下所有这些:
- 先做出承诺:
@interface yourViewController : UIViewController <UITextFieldDelegate>
然后确保您还将情节提要上的文本字段的委托连接到实际的视图控制器 (yourViewController)!
完成后,在右侧视图控制器文件(yourViewController.m)中实现该方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
- 测试一下,现在应该可以工作了...
希望对你有帮助!
【解决方案3】:
将委托设置为您的 TextField
在界面 Builder 中选择您的 TextField,然后按 command + 2(Connections) 并将输出的委托与文件所有者连接,然后保存,这样应该可以工作。
委托方法是:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
}
希望对你有帮助。
【解决方案4】:
你设置了代理吗?
如果没有,设置使用
textField.delegate=self;
否则,
您必须在 .h 文件中包含 UITextFieldDelegate
@interface yourViewController : UIViewController <UITextFieldDelegate>
编辑:
您必须在此委托中编写代码 textFieldDidEndEditing 而不是此 textFieldShouldEndEditing