2010-06-03 2 views
4

저는 UITextView입니다. 나는 터치에 응답하고 내 UITextView에 대한 firstResponder를 사임하기 위해 navigationBar UIBarButtonItem을 구현했습니다.UITextView로 FirstResponder를 resign 할 수 없습니다.

그러나 선택기 메서드를 호출하면 키보드가 해제되지 않습니다. isFirstResponder으로 UITextView의 응답자 상태를 확인하고 YES를 반환합니다. 나는 또한 canResignFirstResponder으로 검사했고 반환 값은 NO이다.

내가 여기에 뭔가를 놓치고 있어야합니다 ... 왜 그걸 돌려주지 않습니까?

나는 UITextView를 서브 클래 싱하여 canResignFirstResponder을 오버라이드 할 수 있다고 생각하지만 가능한 경우이를 피하고 싶습니다.

는 여기에 코드입니다 :

- (void) commentCancelButtonTouched:(id)sender 
{ 
    NSLog(@"Cancel button touched"); 
    [self.navigationBar popNavigationItemAnimated: NO]; 

    if ([self.textInput.textView canResignFirstResponder] == NO) { 
     NSLog(@"I don't want to resign!"); 
    } 

    [self.textInput.textView resignFirstResponder]; 
}
+0

'self.textInput'의 클래스 란 무엇입니까? – Senseful

+0

'UIView'를 하위 클래스로 만드는 맞춤 클래스입니다. – Calvin

답변

1

나는 그것을 알아 냈다. 내 'textInput'보기에서 textViewShouldEndEditing의 'UITextViewDelegate'메서드를 사용하여 NO을 반환하도록 재정의했습니다. YES으로 변경하고 문제를 해결했습니다. 누군가가 당신이 텍스트 뷰의 외부 터치 할 때 키보드를 숨기고 싶어 그냥 경우

3

UIView의 서브 클래스의 방법으로 당신의 UITextField를 해결 약간의 비 표준입니다. 내가 당신이라면, 직접 UITextField에 대한 직접적인 핸들을 뷰 컨트롤러 내부에서 얻을 수 있습니다. 보기 컨트롤러의 합성 속성으로 설정하고 IBOutlet 키워드를 사용하여 Interface Builder에서이 인터페이스에 대해 이야기 할 수 있도록 한 다음 콘센트가 텍스트 필드에 연결되어 있는지 확인하십시오.

즉, self.textInput.textView에 대해 이야기하기보다는 self.textView에 대해 직접 이야기하고 싶습니다. 그리고 실제 문제가있는 곳에서 의심되는 IB 출현 정보를 다시 확인하십시오.

+0

팁을 주셔서 감사합니다. 인터페이스 빌더를 사용하지는 않지만 프로그래밍 방식으로 완료되었습니다. – Calvin

+0

Gotcha. 더욱 그렇다면 컨트롤러와 UITextField 사이에 추상화 계층을 갖는 것은 좋은 생각이 아닙니다. –

+0

알아 냈어. 내'textInput' 뷰에'UITextViewDelegate' 메소드가 있었고,'textViewShouldEndEditing'는 NO를 반환하도록 오버라이드되었습니다. YES로 변경하고 문제를 해결했습니다. 가! 그러나 여전히 충고에 감사드립니다. – Calvin

5

, 그것은

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 

    [self.xFront resignFirstResponder]; 
} 

xFront 내 UITextView 내 콘센트입니다 ... 아주 간단합니다.

관련 문제