NIB 파일에서로드하는 대신 프로그래밍 방식으로 뷰를 만드는 UIViewController 하위 클래스를 작성했습니다.내보기에 대한 응답 체인에 내 UIViewController가없는 이유는 무엇입니까?
그것은 간단한 loadView
방법이 있습니다
- (void)loadView
{
UIScrollView *mainScrollView =
[[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = mainScrollView;
[mainScrollView release];
}
을 ... 설명하는대로 그때, viewDidLoad
내 초기화의 대부분을한다. 그것은 모두 작동하며, 내 사용자 정의보기로 스크롤보기를 볼 수 있습니다.
UINavigationBar 워크 플로의 일부이기 때문에 뷰를 소유하려면 UIViewController가 필요합니다. 컨트롤러 객체를 가지고 있기 때문에 나는 컨트롤러 객체를 사용하고 싶습니다.
문제는 내 View Controller가 응답 체인에없는 것 같습니다. touchesBegan:withEvent:
은 내가 루트 컨트롤러 뷰 또는 서브 뷰에 정의하면 호출되지만 뷰 컨트롤러에있는 경우에는 호출되지 않습니다.
Apple 이벤트 처리 설명서에는 view controller should be in the responder chain이 나와 있습니다. UIViewController 설명서는 위에서 수행 한 것처럼 self.view
속성에 루트 뷰를 할당하는 것 이상의 추가 단계에 대해서는 아무 것도 말하지 않습니다. UIResponder 문서에서는 UIView에 컨트롤러가 있는지 여부와 이벤트를 전달해야 하는지를 알아야한다고 주장합니다. UIScrollView 설명서에는 아무런 언급이 없습니다.
행운이없는 모든 뷰와 하위 뷰에 대해 다양한 설정으로 userInteractionEnabled:
을 실험했습니다.
무엇이 누락 되었습니까?
내가 있기 때문에 루트 뷰가있는 UIScrollView를 제외하고 어떤 경우, 뷰 컨트롤러가 리스폰 더 체인에 있음을 배웠다. UIScrollView가 깨졌습니까? – EricB
이 답변은 도움이됩니다 : http://stackoverflow.com/a/7808238/790198 – Nianliang