Я работаю над контроллерами представления, которые имеют много UIview в сетке. Эти представления имеют некоторое взаимодействие (например, кнопки и т. Д.). Но при касании этого вида я хочу, чтобы появился новый контроллер вида. Я не могу найти способ проверить на касание от этих взглядов. Есть метод CGRectContainsPoint ... но у меня есть несколько UIViews.
Пожалуйста, помогите мне!
Вы пробовали?
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event { CGPoint point = [[touches anyObject] locationInView:self.view]; if ( CGRectContainsPoint(subview1.frame, point)) { //show viewcontroller1 } if ( CGRectContainsPoint(subview2.frame, point)) { //show viewcontroller2 } }
Таким образом, вы сможете определить, какое подпредставление затронуто.
Идея состоит в том, что сначала вы получите свои координаты на основе self.view, а затем сможете сравнить их сподпредставления оригинального представления.
Я думаю, что другие возможные решения могут быть:
1 Использовать keyValueObserving http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
или 2 NSNotificatonCenter сообщений http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html
С помощью обоих методов вы можете позволить вашим (под) представлениям сигнализировать вашему контроллеру просмотра, когда ваше подвид обнаруживает прикосновение, и позволить контроллеру представления действовать соответствующим образом.
Другим способом решения этой проблемы может быть добавление распознавателей жестов в ваши представления для выбора нажатий:
UITapGestureRecognizer *tapGestureRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_method_:)]; [_view_ addGestureRecognizer:tapGestureRecogniser]; [tapGestureRecogniser release];
Это вызовет метод всякий раз, когда представление постучал.Надеюсь, это поможет.