我正在我的应用的导航栏中创建一个UISearchBar选项。 我的应用包含多个视图和子视图。 我有这个主视图,其他3个观点。其中一个是空的(现在),另外两个有关于它们的表格视图。
当我正在进行实际搜索或在uisearchbar外触摸/点击时,我希望我的键盘能够在我搜索和隐藏时显示。 我根据需要使用searchbardelegate。
我可以通过以下方式使用[searchBar resignFirstResponder]隐藏键盘。
当我使用
触摸屏幕的空白部分时- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if ([mySearchBar isFirstResponder] && [touch view] != mySearchBar) {
[mySearchBar resignFirstResponder];
}
[super touchesBegan:touches withEvent:event];
}
我似乎无法做到的是让它回复触摸我的2个表格视图中的一个。或者当我重新填充主视图以包含完全不同的东西时。
我曾尝试更改touchesbegan方法,在触摸tableviews时重新设置搜索栏,但到目前为止它还没有工作。
我已经尝试过亲爱的朋友先生发现的其他几件事。谷歌,但这似乎是我需要的其他东西。任何人对我可以采取哪些措施来解决这个问题都有任何想法?
编辑: 看来这样,当使用断点时,touchesbegan-method会响应backgroundview,但是当我触摸其中一个tableviews或导航栏(包含uisearchbar)时它没有响应。
答案 0 :(得分:13)
解决了!
- (BOOL) searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
[self.myViewController1.customView1 setUserInteractionEnabled:NO];
[self.myViewController2.customView2 setUserInteractionEnabled:NO];
[searchBar setShowsCancelButton:YES animated:[mySettings animation]];
return YES;
}
在我开始使用searchBar的那一刻,我开始关闭我的2个子视图上的userInteraction。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if ([self.mySearchBar isFirstResponder] && [touch view] != self.mySearchBar)
{
[self.mySearchBar resignFirstResponder];
[self.myViewController1.customView1 setUserInteractionEnabled:YES];
[self.myViewController2.customView2 setUserInteractionEnabled:YES];
}
[super touchesBegan:touches withEvent:event];
}
然后当我在searchBar外面点击/点击/触摸时,我首先重新设置键盘,这是第一个响应者仍然是在我为2个子视图重新设置userInteraction之后。 这样做的顺序至关重要!
这段代码允许你在一个mainViewController中将键盘重新签名,即使它挤满了大量的子视图。
答案 1 :(得分:0)
你试过这个吗,
UISearchBar *searchBar;
接下来设置UISearchBar
的Getter和Setter属性。
并调用any方法
[searchBar resignFirstResponder];