그리드 레이아웃에서 많은 UIview가있는 뷰 컨트롤러에서 작업하고 있습니다. 이러한 뷰에는 버튼과 같은 상호 작용이 있습니다. 하지만 그 뷰를 만지면 새로운 뷰 컨트롤러가 나타나기를 바랍니다. 이러한보기에서 접촉을 확인하는 방법을 찾을 수 없습니다. CGRectContainsPoint 메서드가 있지만 여러 UIView가 있습니다.UIView 배열에서 터치 감지
제발 도와주세요!
그리드 레이아웃에서 많은 UIview가있는 뷰 컨트롤러에서 작업하고 있습니다. 이러한 뷰에는 버튼과 같은 상호 작용이 있습니다. 하지만 그 뷰를 만지면 새로운 뷰 컨트롤러가 나타나기를 바랍니다. 이러한보기에서 접촉을 확인하는 방법을 찾을 수 없습니다. CGRectContainsPoint 메서드가 있지만 여러 UIView가 있습니다.UIView 배열에서 터치 감지
제발 도와주세요!
시도해 보셨습니까?
-(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 때 신호 당신의 하위 뷰는 터치를 감지하고 뷰 콘트롤러가 이에 따라 행동하도록합니다.
탭을 데리러 귀하의 의견에 제스처 인식기를 추가하는 것이 문제를 다루는 또 다른 방법 다음 보기이 도청 될 때마다
UITapGestureRecognizer *tapGestureRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_method_:)];
[_view_ addGestureRecognizer:tapGestureRecogniser];
[tapGestureRecogniser release];
이 방법을 부를 것이다. 희망이 도움이됩니다.
나는 이것을 시도했다. 그러나 여전히 문제는 지속되며, 이러한 견해에는 두드리기위한 버튼이 있습니다. 보기를 완료하기 위해 탭 획득을 추가하면이 버튼에 결합 된 동작이 호출되지 않고 충돌합니다. – SamG
내보기에 두 개의 버튼이 포함되어 있으므로 해당 버튼을 두드릴 때 touchesBegan이 호출되거나 touchUpInside가 표시됩니까? 게다가 그리드는 12 뷰를 포함하므로 touchesBegan 메서드에서 루프를 사용해야 할 것입니다 ...하지만 터치가 감지 될 때마다 루프를 실행하는 효율적인 방법입니까? – SamG
두 가지 일이 발생할 수 있습니다. 버튼을 건 드리면 결합 된 선택기가 호출됩니다. 그렇지 않으면 뷰가 터치되면 touchesbegan이 호출됩니다. 나는 그것이이 문제를 다루는 가장 효율적인 방법이 아닐 것이라는 데 동의한다. 나는 이것을하기위한 두 가지 다른 방법을 설명하기 위해 나의 대답을 편집 할 것이다. –