2012-01-26 2 views
1

목적이 c이고 xcode를 사용하는 ios 앱에서 작업합니다. UIResponder로부터 상속받은 다른 클래스에서 상속받은 클래스가 있으며 뷰가 포함되어 있습니다. 하위 클래스 내에 touchesBegan이 있지만 디버그/dev 모드로 앱을 실행할 때만 이벤트가 호출됩니다. 생산/릴리스 빌드를 만들 때 터치 이벤트가 호출되지 않습니다. touchesBegan은 uiresponder 하위 클래스에서 무시되었습니다.

// Basic viewcontroller protocol 
@protocol SubViewController 
    - (void)viewDidAppear:(BOOL)animated; 
    - (void)viewDidDisappear:(BOOL)animated; 
    - (void)viewWillAppear:(BOOL)animated; 
    - (void)viewWillDisappear:(BOOL)animated; 
    - (void)viewDidLoad; 
    -(UIView *)view; 
@end 


@interface SubViewController : UIResponder<SubViewController> { 
} 

///////////////////////////////////////////////////////////////////////////////// 


// A custom subview controller 
// 

@interface mySubViewController : SubViewController { 

} 

및 mysubviewcontroller 클래스 내에서 내가

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    //some code and magic 
} 

이 지금 내가 디버깅이 실행 특징으로하는 미세하지만 터치 이벤트는 릴리스에서 무시됩니다. 당신을 위해 이것을 명확히하는 데 도움이되는 조언, 아이디어 또는 질문을 말해주십시오. 미리 감사드립니다.

편집 : 나는이 문서에서 이것을 보았습니다. "super (공통 사용 패턴)를 호출하지 않고이 메서드를 재정의하는 경우, 스텁 (empy)으로만 사용하는 경우에는 터치 이벤트를 처리하는 다른 메서드를 재정의해야합니다. 구현. " 그래서 나는 다른 모든 터치 이벤트에서 스텁되었지만 릴리스 빌드는 변경되지 않았습니다.

+0

'UIResponder'에서 이미 상속받은'UIViewController'를 서브 클래 싱하지 않는 특별한 이유가 있습니까? 귀하의 커스텀'UIResponder' 서브 클래스가 반응 체인에 제대로 추가되지 않았다고 의심됩니다. – omz

+0

hmm 서브 클래스가 리스폰 더 체인에 추가되었는지 어떻게 확인합니까? 또는 그것을 추가하는 올바른 방법은 무엇입니까? 내가 uiviewcontroller를 서브 클래 싱하지 않는 이유가 있었다는 것을 확신하지만, 저의 삶에 대해 위선적으로 말하지 않고 오랜 시간 전에 썼습니다. – glogic

+1

[UIViewController'] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html) 문서의 세 번째 단락을 참조하십시오. 기본적으로 관리하고있는 뷰와 "뷰 컨트롤러"에서'nextResponder'를 오버라이드해야합니다. 뷰는 뷰 컨트롤러를 반환하고 뷰 컨트롤러는 뷰의 수퍼 뷰를 반환합니다. – omz

답변

0

UIViewController을 서브 클래스 화하지 않으므로 응답자 체인을 수동으로 응답기 체인에 추가해야합니다.

응답자 체인의 위치는보기와보기의 수퍼 뷰 사이에 있으므로 동일한 동작을 얻으려면보기와 관리하는 컨트롤러에서 모두 nextResponder을 재정의해야합니다. 뷰는 컨트롤러를 반환해야하며 컨트롤러는 뷰의 수퍼 뷰를 반환해야합니다.

관련 문제