您所看到的行爲不依賴於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;
}
}