1

becomeFirstResponder을 자체보기에서 하위보기로 리디렉션 할 수 있습니까?하위보기로가는 firstFirstResponder를

내 시나리오입니다.
새롭게 UIWindow을 만들고, secWin 개체를 UINavigationController으로 지정하고, navConrootViewController으로 부릅시다.
navCon은 맞춤 UIViewController이며, 만 포함 된 으로 전화를 cusViewCon이라고합시다.
이제 메인 윈도우의 버튼을 누르면 [secWin makeKeyAndVisible]이 호출되어 새 창을 성공적으로 보여줍니다.
하지만 지금은 이 언제든지 키보드를 표시하고 싶습니다. cusViewConbecomeFirstResponder 전화를받습니다. [secWin makeKeyAndVisible]을 호출 할 때 iOS에서 기본적으로 완료됩니다.

는 단순히 이런 내 cusViewCon 클래스 becomeFirstResponder을 덮어 모든이 작업을 수행하려고 :

- (BOOL)becomeFirstResponder { 
    [_myTextField becomeFirstResponder]; 

    return NO; 
} 

에 있기 때문에, 그것은 작동하지만, 그렇게하는 것이 올바른 방법입니다 경우 모르겠어요 문안 :

사용자 지정 응답자에서이 메서드를 재정 의하여 개체 상태를 업데이트하거나 선택 영역을 강조 표시하는 등의 작업을 수행 할 수 있습니다. 이 메소드를 오버라이드 (override)하는 경우는, 구현의 어느 지점에서 super를 호출 할 필요가 있습니다.

+0

무엇보다도 특별한 것을해야 할 필요가 없다면 우선 하나의 창만 있어야합니다. 왜 두 개의 창이 필요합니까? –

+1

두 번째 창은 다른 모든 것보다 위에 있어야하는 "화면 잠금"에 필요합니다. 이 잠금 화면은 이전에 모달 뷰 컨트롤러로 구현되었지만 많은 문제를 제기했으며이를 변경하기로 결정했으며 창은 최상의 솔루션이었습니다. –

답변

2

이 방법은 거의 모든보기가 첫 번째 응답자가 될 수있는 MacOS 용 비트를 코딩 할 때 실제로 더 적합합니다. 따라서 문서화에 대해 많은 것을 걱정하지 마십시오.

귀하의 절차는 올바른 궤도에 있지만 내가 좋아하는 뭔가를 할 것이다 :

- (BOOL)becomeFirstResponder { 
    BOOL willBecomeFirstResponder = [super becomeFirstResponder]; 
    if(willBecomeFirstResponder) { 
     return YES; // This element is taking over the first responder so do nothing 
    } 
    else { 
     [_myTextField becomeFirstResponder]; // This element may not become first responder at the moment so forward message to text field 
     return NO; 
    } 
} 

우리는 여전히이 발생하는 슈퍼 클래스 메소드의 실행을 위해이 방법을. 귀하의 경우에는 false를 반환해야하며 그렇지 않으면 canBecomeFirstResponder 메서드를 살펴보십시오. 따라서 텍스트 필드에 메시지를 받아야합니다. 설계자가 응급 대응자가되는 경우 텍스트 필드에서 호출하지 않는 것이 가장 좋습니다.

+0

고맙습니다. 이것은 많은 도움이됩니다. "당신은 슈퍼 구현을 호출해야합니다."제게 많은 두통을 줬습니다. 하지만 당신은 내 구현에 대한 모든 우려에 답했습니다. –