2012-06-19 1 views
1

У меня есть простое приложение MapKit, работающее отлично в iOS. Он имеет аннотацию, и когда пользователь нажимает на них, появляется маленькое серое всплывающее окно по умолчанию с заголовком/субтитрами. Я даже добавил в него представление UIButton.GestureRecognizer Interferes w/MapKit Popup

Так что проблема в том, что у меня есть панель поиска над моей картой. Я хотел бы resignFirstResponder из окна поиска всякий раз, когда пользователь нажимает на MapView, поэтому я добавил простой ответчик жесты. Работало отлично, но теперь маленькие серые детали всплывающие окна больше не отображаются (только аннотации)! Я все еще могу нажимать, масштабировать, перемещаться и т. Д. Просто нет всплывающих окон.

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
tap.cancelsTouchesInView = NO; 
tap.delaysTouchesBegan = NO; 
tap.delaysTouchesEnded = NO; 
[mapView addGestureRecognizer:tap]; 


-(IBAction)tapped:(UITapGestureRecognizer *)geture { 
    [searchBar resignFirstResponder]; 
} 

Возможно ли иметь лучшее из обоих миров?

ответ

2

Я использовал метод делегирования, подобный следующему, для арбитража между касаниями, которые должны перейти к распознавателю жесты жесткого диска пользовательского вида и касаниям, которые должны перейти в представление прокрутки, содержащее мое пользовательское представление. Что-то вроде этого может сработать для вас.

// the following UIGestureRecognizerDelegate method returns YES by default. 
// we modify it so that the tap gesture recognizer only returns YES if 
// the search bar is first responder; otherwise it returns NO. 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ((gestureRecognizer == self.tapGestureRecognizer) && 
     (gestureRecognizer.view == self.mapView) && 
     [searchBar isFirstResponder]) 
    { 
    return YES; // return YES so that the tapGestureRecognizer can deal with the tap and resign first responder 
    } 
    else 
    { 
    return NO; // return NO so that the touch is sent up the responder chain for the map view to deal with it 
    } 
} 
+0

Хорошая сделка, спасибо мужчина =] –

Смежные вопросы