我有相当多的控件分散在我的表格中的许多表格单元格中,我想知道是否有一种更简单的方法来消除键盘,而不必循环遍历所有的控件并将它们全部辞职为第一响应器。我想问题是…我如何得到当前的第一个响应器的键盘?
当前回答
关于如何在iOS中当用户触摸屏幕上UITextField或键盘之外的任何地方时取消键盘的快速提示。考虑到iOS键盘所占用的空间,为用户提供一种简单直观的方式来消除键盘是有意义的。
这是一个链接
其他回答
我最近需要使用的一个稍微健壮一点的方法:
- (void) dismissKeyboard {
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *window in windows) [window endEditing:true];
// Or if you're only working with one UIWindow:
[[UIApplication sharedApplication].keyWindow endEditing:true];
}
我发现其他一些“全局”方法不起作用(例如,UIWebView和WKWebView拒绝辞职)。
这不是很漂亮,但是当我不知道responder是什么时,我辞去firstResponder的方式:
创建一个UITextField,无论是在IB或编程。把它隐藏起来。如果你是用IB写的,就把它链接到你的代码上。 然后,当你想要解散键盘时,你将响应器切换到不可见的文本字段,并立即辞职:
[self.invisibleField becomeFirstResponder];
[self.invisibleField resignFirstResponder];
这是一个解决方案,使键盘离开时,点击返回在任何文本字段,通过添加代码在一个地方(所以不必为每个文本字段添加一个处理程序):
考虑一下这个场景:
我有一个带有两个文本字段(用户名和密码)的视图控制器。 并且视图控制器实现UITextFieldDelegate协议
我在viewDidLoad中这样做
- (void)viewDidLoad
{
[super viewDidLoad];
username.delegate = self;
password.delegate = self;
}
而视图控制器实现了可选方法as
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
不管你在哪个文本域,只要我按下回车键,它就会消失!
在你的情况下,同样的工作,只要你设置所有的文本字段的委托自我和实现textFieldShouldReturn
您可以递归地遍历子视图,存储所有UITextFields的数组,然后循环遍历它们并重新分配它们。
这并不是一个很好的解决方案,特别是当你有很多子视图时,但对于简单的应用程序来说,它应该是可行的。
我用一种更复杂,但更高效的方式解决了这个问题,但使用了我的应用程序的动画引擎的单例/管理器,任何时候一个文本字段成为响应器,我会将它分配给一个静态,它会根据某些其他事件被清除(辞职)…我几乎不可能用一段话解释清楚。
要有创意,在我发现这个问题后,我只花了10分钟就考虑了这个问题。
你必须使用其中一种方法,
[self.view endEditing:YES];
or
[self.textField resignFirstResponder];
推荐文章
- 为什么ARC仍然需要@autoreleasepool ?
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?