2010-01-30 4 views
1

У меня есть UITextView в моем навигаторе, который действует как окно поиска. Я хотел бы отключить связанную клавиатуру, когда пользователь нажимает на текстовое поле, а именно на MKMapView. Однако я не могу понять, как это сделать, потому что это не похоже на то, что я могу перехватывать касания с карты.Отключить клавиатуру при кранах пользователя Mapview

Я рассмотрел ряд решений, но, насколько я могу судить, ни один из них не работает для моего дела. У кого-нибудь есть простой способ сделать это? Я немного нуб, поэтому, пожалуйста, дайте мне знать, если я не предоставил некоторую релевантную информацию, и, пожалуйста, предоставьте несколько строк кода примера в вашем ответе, если сможете - я все еще немного шаткий по терминологии. Благодаря!

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

ответ

1

Предполагая

UITextView *textView; 

Тогда вы можете закрыть клавиатуру, отправив:

[textView resignFirstResponder]; 

Также вы можете предпочесть использовать UISearchBar и установить его в качестве navigationItem.titleView из ViewController. Это предлагает некоторые приятные методы делегирования.

+0

Спасибо за отзыв о использовании UISearchBar. Я попробую это. Моя проблема заключается в том, что я не уверен, как определить, когда пользователь нажимает на карту, поэтому мне некуда писать эту строку кода :) – Imran

+0

У вас есть код для получения штрихов. – FelixLam

+0

Я не думаю, что вы можете это сделать! См. Http://stackoverflow.com/questions/1049889/how-to-intercept-touches-events-on-a-mkmapview-or-uiwebview-objects. Дайте мне знать, если я не понимаю. Я просматриваю прозрачный вид над картой, когда клавиатура встает и получает от нее касания (принятое решение в моей ссылке выглядит слишком сложным для моих целей). – Imran

1

Я знаю, что это старый, но если кто-то ищет простой ответ на этот вопрос, вот мое решение, чтобы получить «mapView» для resignFirstResponder. Это будет работать аналогично приложению Google Maps на iphone, где появляется полупрозрачный прямоугольник, когда вы начинаете редактировать текстовое поле поиска.

Во-первых, вы должны сделать свой вид контроллер с 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]; 
} 
0

Менее Hacky решение полагаться на один из методов делегата MKMapView в отпустите клавиатуру

- (void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { 
    if ([self.textField isFirstResponder]) { 
    [self.textField resignFirstResponder]; 
    } 
} 
Смежные вопросы