用户点击Mapview时关闭键盘

时间:2010-01-30 17:34:59

标签: iphone

我的Navbar中有一个UITextView作为搜索框。当用户点击文本框下方时,我想关闭相关的键盘 - 即在MKMapView上。但是我无法弄清楚如何做到这一点,因为它看起来不像我可以截取mapview中的触摸。

我已经看了很多解决方案,但据我所知,似乎没有一个解决方案适用于我的情况。有没有人有一个简单的方法来做到这一点?我有点像菜鸟,所以如果我没有提供相关信息,请告诉我,如果可以,请在答案中提供几行示例代码 - 我的术语仍然有些不稳定。谢谢!

screenshot http://img532.imageshack.us/img532/4070/keyboardsm.png

3 个答案:

答案 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];
  }
}