2012-01-05 3 views
0

그리드 레이아웃에서 많은 UIview가있는 뷰 컨트롤러에서 작업하고 있습니다. 이러한 뷰에는 버튼과 같은 상호 작용이 있습니다. 하지만 그 뷰를 만지면 새로운 뷰 컨트롤러가 나타나기를 바랍니다. 이러한보기에서 접촉을 확인하는 방법을 찾을 수 없습니다. CGRectContainsPoint 메서드가 있지만 여러 UIView가 있습니다.UIView 배열에서 터치 감지

제발 도와주세요!

답변

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

내보기에 두 개의 버튼이 포함되어 있으므로 해당 버튼을 두드릴 때 touchesBegan이 호출되거나 touchUpInside가 표시됩니까? 게다가 그리드는 12 뷰를 포함하므로 touchesBegan 메서드에서 루프를 사용해야 할 것입니다 ...하지만 터치가 감지 될 때마다 루프를 실행하는 효율적인 방법입니까? – SamG

+0

두 가지 일이 발생할 수 있습니다. 버튼을 건 드리면 결합 된 선택기가 호출됩니다. 그렇지 않으면 뷰가 터치되면 touchesbegan이 호출됩니다. 나는 그것이이 문제를 다루는 가장 효율적인 방법이 아닐 것이라는 데 동의한다. 나는 이것을하기위한 두 가지 다른 방법을 설명하기 위해 나의 대답을 편집 할 것이다. –

0

탭을 데리러 귀하의 의견에 제스처 인식기를 추가하는 것이 문제를 다루는 또 다른 방법 다음 보기이 도청 될 때마다

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

방법을 부를 것이다. 희망이 도움이됩니다.

+0

나는 이것을 시도했다. 그러나 여전히 문제는 지속되며, 이러한 견해에는 두드리기위한 버튼이 있습니다. 보기를 완료하기 위해 탭 획득을 추가하면이 버튼에 결합 된 동작이 호출되지 않고 충돌합니다. – SamG