2011-06-14 2 views
1

이 상황에서 UIButtons, UIScrollViews 등을 사용하는 데 문제가 있습니다.UIResponder 체인 설명 필요

UIWindow의 루트 컨트롤러 인 기본 UIViewController가 있습니다. 그 레이어 위에 나는 "Middle Layer View"라고 부를 다른 UIViews을 추가했습니다. 그리고 맨 위에 또 다른 UIView가 오버레이 개체에 추가되었습니다.

중간 계층보기가 여러보기에 대해 정기적으로 변경됩니다. 사용하는 UIView은 NIB 파일로 만든 UIViewController에서 가져온 것입니다. 다음은 예제입니다.

if (mode == eModeShowView1) 
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"... 
else if (mode == eModeShowView2) 
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"... 

[UIView insertSubview:nextController.view below:m_overlayView]; 

이제 화면을 터치하면 첫 번째 응답자는 분명히 OverlayView 또는 OverlayViewOverlayView입니다. 터치 입력의 UIEvent은 뷰 체인을 올라가지만 중간 레이어보기와 그 UIViewUIResponders는 건너 뜁니다. 루트 UIViewController로 곧바로 점프합니다.

여기에 무슨 일이 일어나는 지 아는 사람 있습니까?

어떻게 든 UIEvents를 두 개 만들어서 해결할 수 있습니까? 오버레이보기 용과 미들 레이어보기 용 중 하나입니까? 그게 가능하니? 그렇다면 어떻게?

어떤 도움을 주시면 감사하겠습니다. 감사합니다, 리치

답변

0

시작 EDIT1 :

당신이 m_overlayView 및 initWithTarget에 UITapGestureRecognizer를 넣을 수 있습니다 : 당신의-middleview 작업을 : 몇 가지 - 방법 -에 - middleview을

이제, 당신이 할 수있는 당신의 middleview에 recognizer.state를 UIGestureRecognizerStateBegan, Ended 등으로 식별하고 수행하려는 작업을 수행하십시오.

편집 끝 :

디버깅 할 수 있습니다. 모든 컨트롤러에서 touchesbegan의 로그를 사용하십시오. 터치 반응의 순서를 기록하는 것이 명확합니다.

좋습니다. 설명서에서이 방법에 대한 설명이 도움이 될 수 있습니다. m_overlayViewnextController.view은 수퍼바이저가 아닌 형제로 서로 관련됩니다. 따라서 둘 중 하나에 대한 터치는 다른쪽에보고되지 않고 두 형제 모두에게 일반적인 superview 인 기본 superview으로보고됩니다.

따라서 중간 계층이 무시되고 있습니다. 실제로 중간 계층은 형제이며 더 이상 superview가 아닙니다. 희망은 적어도 당신에게 어떤 길을 전합니다.)

insertSubview:belowSubview: 

보기 계층 구조의 다른보기 아래에보기를 삽입합니다.매개 변수

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview 

:

view 

뷰는 다른 뷰 아래에 삽입합니다. 형제 자매의 형제가 아니라면 그것의 superview에서 제거되었습니다. 하위 뷰.

siblingSubview : 삽입도 이상이어야한다

형제보기.

토론는 :

이 방법은 볼을 보유하고있다 superview 새로운 수신기로의 다음 응답을 설정한다.

보기에는 수퍼 뷰가 하나만있을 수 있습니다. 보기에 이미 superview이 있고보기가 수신기가 아닌 경우이 방법은 수신기를 새로 만들기 전에 이전 superview을 제거합니다. superview.

+0

안녕하세요. 빠른 답변 감사합니다. 내 모든 ViewController에서 touchesBegan 등을 기록했습니다. 이것이 제가 중간 계층을 건너 뛰는 것을 알 수 있었던 것입니다. 이유를 모르겠습니다. : s. –

+0

내 업데이트 된 답변을 통해 이동하십시오 –

+0

아, 네. 그것이 바로 일어나고있는 일입니다. 누구든지이 문제를 해결할 수있는 방법을 알고 있습니까? 오버레이 아래에 중간 레이어를 삽입 한 다음 오버레이의 슈퍼 뷰를 중간 레이어로 설정할 수 있습니까? –