2012-01-05 2 views
0

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

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

ответ

1

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

-(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, а затем можете сравнивать их с подзонами исходного вида.

Я думаю, что другие возможные solutoions могут быть:

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

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

+0

Мое мнение содержит две кнопки, поэтому нажимать на эти кнопки будет касатьсяBegan вызывает или touchUpInside? Кроме того, сетка содержит 12 просмотров, поэтому мне придется использовать цикл в методе touchhesBegan ... но эффективный способ запускать этот цикл каждый раз при обнаружении касания? – SamG

+0

Есть две вещи, которые могут произойти, когда ваши кнопки касаются селектора, который связан с ним, будут вызваны. В противном случае, если вид коснется касания, будет вызываться. Я согласен, что это не самый эффективный способ решения этой проблемы. Я отредактирую свой ответ, чтобы описать два разных способа сделать это. –

0

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

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

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

+0

Я пробовал это. Но проблема остается, эти взгляды имеют кнопки для прослушивания. При добавлении кранов для полного просмотра действие, связанное с этими кнопками, не вызывается, вместо этого оно вылетает. – SamG

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