Обнаружение касания из массива UIViews - PullRequest
0 голосов
/ 05 января 2012

Я работаю над контроллерами представления, которые имеют много UIview в сетке. Эти представления имеют некоторое взаимодействие (например, кнопки и т. Д.). Но при касании этого вида я хочу, чтобы появился новый контроллер вида. Я не могу найти способ проверить на касание от этих взглядов. Есть метод CGRectContainsPoint ... но у меня есть несколько UIViews.

Пожалуйста, помогите мне!

Ответы [ 2 ]

1 голос
/ 05 января 2012

Вы пробовали?

-(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

С помощью обоих методов вы можете позволить вашим (под) представлениям сигнализировать вашему контроллеру просмотра, когда ваше подвид обнаруживает прикосновение, и позволить контроллеру представления действовать соответствующим образом.

0 голосов
/ 05 января 2012

Другим способом решения этой проблемы может быть добавление распознавателей жестов в ваши представления для выбора нажатий:

UITapGestureRecognizer *tapGestureRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_method_:)];
    [_view_ addGestureRecognizer:tapGestureRecogniser];
    [tapGestureRecogniser release];

Это вызовет метод всякий раз, когда представление постучал.Надеюсь, это поможет.

...