我有一個的UITextField即宣告密碼字段使用停止的UITextField安全文本從清除現有文本
passwordField.secureTextEntry = YES;
我的問題是,當我輸入我一半的密碼,點擊不同的組成部分,回到passwordField並重新開始輸入,iOS會清除現有的文本。
有沒有辦法來防止這種情況發生或關閉?
-Henry
我有一個的UITextField即宣告密碼字段使用停止的UITextField安全文本從清除現有文本
passwordField.secureTextEntry = YES;
我的問題是,當我輸入我一半的密碼,點擊不同的組成部分,回到passwordField並重新開始輸入,iOS會清除現有的文本。
有沒有辦法來防止這種情況發生或關閉?
-Henry
默認情況下,您無法對安全文本字段執行此操作。你可以解決它。
執行委託方法textField:shouldChangeCharactersInRange:replacementString:
並使用傳遞的值決定要執行的操作。
即,如果範圍是整個字符串,並且替換爲空字符串,則不允許進行更改。新文本可能會作爲新輸入的字符提供,您需要檢查該方法實際接收的參數。
最簡單的方法是實施委託的UITextField用類似下面的代碼:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)replacementString {
if (textField.text) {
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:replacementString];
} else {
textField.text = replacementString;
}
return NO;
}
嗯,我有,當我改變鍵盤類型,以4(數字我的密碼組合相同的情況下)+1(阿爾法),停止清算secureTextEntry
,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
textField.keyboardType = UIKeyboardTypePhonePad;
[textField reloadInputViews];
return YES;
}
它重新加載UITextField
而不是它的文本,所以不清除文本它改變了鍵盤的字母數字編號,反之亦然。您可以將其用於您自己的功能。
只是出於好奇,你有沒有試過這種解決方案,因爲我也有類似的問題(顯示/隱藏密碼),我的問題是,當用戶切換顯示/隱藏按鈕和文本框又回來了作爲secureTextEntry光標被定位在字符串的末尾,但如果輸入了一個字符,則先前的字符串被刪除,只是新的文本被「保存」,並且我最終通過以編程方式將光標重新放置在textField的末尾並且完成了這個技巧。 – danypata
@danypata不,我沒有真正嘗試它,所以它可能需要一點調整,因爲我不能確定替換將提供一個空字符串或新鍵入的字符。我會用這個更新答案。我實際上並沒有嘗試阻止安全文本字段的標準功能。 – Wain