我的Navbar中有一个UITextView作为搜索框。当用户点击文本框下方时,我想关闭相关的键盘 - 即在MKMapView上。但是我无法弄清楚如何做到这一点,因为它看起来不像我可以截取mapview中的触摸。
我已经看了很多解决方案,但据我所知,似乎没有一个解决方案适用于我的情况。有没有人有一个简单的方法来做到这一点?我有点像菜鸟,所以如果我没有提供相关信息,请告诉我,如果可以,请在答案中提供几行示例代码 - 我的术语仍然有些不稳定。谢谢!
screenshot http://img532.imageshack.us/img532/4070/keyboardsm.png
答案 0 :(得分:1)
假设
UITextView *textView;
然后你可以通过发送:
来解雇keyBoard[textView resignFirstResponder];
另外:您可能更喜欢使用UISearchBar
并将其设置为ViewController的navigationItem.titleView
。这提供了一些很好的委托方法。
答案 1 :(得分:1)
我知道这是一个旧的,但万一其他人正在寻找一个简单的答案,这是我的解决方案,以获得resignFirstResponder的“mapView”。这将与iphone上的Google地图应用程序类似,当您开始编辑搜索文本字段时,会出现半透明框。
首先,您需要将视图控制器设为UISearchBarDelegate
@interface ViewControllerName <UISearchBarDelegate>
// your code here
@end
然后实现以下委托方法:
@implementation ViewControllerName
// your code here
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
darkBg = [[UIControl alloc] initWithFrame:CGRectMake(0, 244, 320, 300)];
[darkBg setBackgroundColor:[UIColor blackColor]];
[darkBg addTarget:nil action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchDown];
[darkBg setAlpha:0.8];
[UIView beginAnimations:@"slideup" context:nil];
[darkBg setCenter:CGPointMake(160, 194)];
[self.view addSubview:darkBg];
[UIView commitAnimations];
}
- (void)hideKeyboard {
[UIView beginAnimations:@"fadeou" context:nil];
[darkBg setAlpha:0.0];
[UIView commitAnimations];
[addressField resignFirstResponder];
[darkBg performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0];
[darkBg release];
}
答案 2 :(得分:1)
一个不太常见的解决方案是依靠其中一个MKMapView委托方法来解除键盘
- (void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated {
if ([self.textField isFirstResponder]) {
[self.textField resignFirstResponder];
}
}