我有一个情况,
当我点击搜索栏键盘时,我在同一屏幕上有一些搜索栏。如果我们点击scree上的任何其他地方,这个键盘现在可能会消失。
请帮助我。
提前完成。
答案 0 :(得分:7)
这是一个非常优雅的解决方案:
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
}
- (void)dismissKeyboard
{
[searchBar resignFirstResponder];
}
答案 1 :(得分:1)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// dismiss keyboard through `resignFirstResponder`
}
答案 2 :(得分:0)
您需要使用UI字段重新设置第一个响应者状态以关闭键盘。
[field resignFirstResponder];
答案 3 :(得分:0)
为了扩展AlBlue和7KV7所说的内容,通常你会有一些关于键盘弹出的UIView,通常可以点击它来从输入字段中“移除焦点”。即更详细地检测“场外和键盘弹出窗口”的点击,例如在具有该字段的工具栏或导航栏上,在桌面视图中的按钮等等。
因此,为避免处理任何可能“耗尽”UIView上的触摸的视图,最好的方法是在键盘弹出窗口的垂直方向上添加透明视图到应用程序的窗口。
如果您有滚动视图,请执行此类操作(粘贴工作代码),因为看起来scrollview特别不会调用touchesBegan。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
UITextField *tfCount=(UITextField *)[self.view viewWithTag:335];
[tfCount resignFirstResponder];
}
标记输入字段的视图非常方便,除非您保留对其的引用。
答案 4 :(得分:0)
解决方案就在这里
对于tableView,你可以在didSelectRow方法中使用所有相同的方法
答案 5 :(得分:0)
当您点击搜索栏时,它会获得焦点并成为第一个响应者。所以,问题是何时通过resignFirstResponder方法释放焦点。一般来说,我会在前面制作一个透明按钮,用于检测屏幕上的任何触摸,不包括搜索栏。或者,您可以注册手势识别器以接收点击事件并释放键盘焦点。
关于手势识别器,您可以参考this link有关UIGestureRecognizer的信息。它在iOS 3.2及更高版本中可用。所以,iPad应用程序可以使用这种类。
答案 6 :(得分:0)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.myTextField resignFirstResponder];
}
}