2011-07-26 68 views
2
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.text.length >=8) 
    { 

     return NO; // return NO to not change text 
    } 
    else { 
     return YES; 
    } 
} 

當我將此方法添加到我的程序中時,文本不會清晰。 如何清除我的文本字段。通過使用下面的方法如何使用代理功能清除文本字段

- (BOOL)textFieldShouldClear:(UITextField *)textField 

回答

2

您所看到的行爲不依賴於textFieldShouldClear:,其默認的實現已經返回YES(source):

文本字段調用此方法來響應用戶按下內置的清除按鈕。 (該按鈕默認不顯示,但可以通過更改文本字段的clearButtonMode屬性中的值來啓用。)編輯開始時將調用此方法,並且文本字段的clearsOnBeginEditing屬性設置爲YES。

的問題textField:shouldChangeCharactersInRange:奠定了否認任何改變,只要文本字段包含更多的8個字:

if (textField.text.length >=8) { 
    return NO; // return NO to not change text 

我不知道你爲什麼要設置這個,或者如果你能找到另一種方式來獲得相同,但如果你想這樣離開,那麼可能的解決方法是檢查replacementString,如果它是空的,則通過返回YES來允許文本更改。

如果您想要更復雜的解決方案,您可以考慮在調用textFieldShouldClear:時設置ivar標誌,以便當您在textField:shouldChangeCharactersInRange:中找到設置的標誌時,返回YES。

- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    self.shouldClearTextCalled = YES; 
    return YES; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 


    if (self.shouldClearTextCalled) 
     return YES; 
    self.shouldClearTextCalled = NO; 

    if (textField.text.length >=8) { 
     return NO; // return NO to not change text 
    } else { 
     return YES; 
    } 
}