2010-08-05 4 views

답변

9

,

- (BOOL)textFieldShouldClear:(UITextField *)textField 

은 사용자가 텍스트 필드를 취소하고자 할 때 호출되는 함수입니다. 당신이

[textField resignFirstResponder]; 

을 YES를 반환하고 호출하는 경우 키보드가 사라한다. clearButtonMode에 대해서는 잘 모릅니다. 여러분이 superview에보기를 추가하기 전에 먼저 설정하는 것이 좋습니다.

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
+0

감사합니다. 위와 같이 textFieldShouldClear를 호출 할 때 키보드가 사라지지 않는 이유는 무엇입니까? 예를 들어 textFieldShouldReturn과 함께 작동합니다. – Dan

+1

예, 지울 때 UI가 어쨌든 필드에 포커스를 강제 할 수 있습니다. 잠시 후 사적인 답변을 추가 한 선을 사용하여 사임을 시도하십시오. – mvds

+1

건배, 지연 문제가 해결 된 것 같습니다! 나중에 0.13을 지우는 – Dan

5

지연 didn를 '을

편집 당신이 정말로, 응답자을 사임 조금 나중에하고 시도 확인하십시오 나를 위해 잘 작동하지. 위임 구현에 그런

BOOL cancelEdit; 

: 대신 나는 대리자 인스턴스 변수를 추가 그것은 당신이 필드를 해결 한 후 사과가 텍스트 필드 포커스를 설정하는 것 같다 전에

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (cancelEdit) { 
     cancelEdit = NO; 

     return NO; 
    } else { 
     return YES; 
    } 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    cancelEdit = YES; 

    return YES; 
} 
+0

이 방법이 가장 좋습니다. – Shmidt

+0

위대한 솔루션, 감사합니다 –

35

같이 언급.

해결책은 간단합니다. 그냥 현장을 직접, resignFirstResponder을 취소하고 나는이 이상한 행동이 textFieldShouldClear 전에 키보드 전에 첫 번째 응답을 사임 경쟁 제스처 인식기에 의해 발생 된 발견 NO

-(BOOL)textFieldShouldClear:(UITextField *)textField 
    { 
     textField.text = @""; 
     [textField resignFirstResponder]; 

     return NO; 
    } 
+0

나를위한 최고의 솔루션! 고마워요! –

+0

사용자가 지우기 버튼을 탭하면 키보드를 표시하지 않고 키보드가 표시되면 숨기고 싶지 않습니다. 위의 코드에서'[textField resignFirstResponder];를 제거합니다. –

0

을 반환하지 : 불렸다. 첫 번째 응답자가 손상된 것으로 보입니다.

이렇게 설정 한 경우 제스처 인식기의 취소 테스트가 YES로 설정되어 있는지 확인하십시오. 이렇게하면 textFieldShouldClear : 또는 textFieldShouldBeginEditing : delegate 메서드에서 특별한 작업을 수행하지 않아도됩니다.

관련 문제