2013-06-04 66 views
0

我有一個的UITextField即宣告密碼字段使用停止的UITextField安全文本從清除現有文本

passwordField.secureTextEntry = YES;

我的問題是,當我輸入我一半的密碼,點擊不同的組成部分,回到passwordField並重新開始輸入,iOS會清除現有的文本。

有沒有辦法來防止這種情況發生或關閉?

-Henry

回答

3

默認情況下,您無法對安全文本字段執行此操作。你可以解決它。

執行委託方法textField:shouldChangeCharactersInRange:replacementString:並使用傳遞的值決定要執行的操作。

即,如果範圍是整個字符串,並且替換爲空字符串,則不允許進行更改。新文本可能會作爲新輸入的字符提供,您需要檢查該方法實際接收的參數。

+0

只是出於好奇,你有沒有試過這種解決方案,因爲我也有類似的問題(顯示/隱藏密碼),我的問題是,當用戶切換顯示/隱藏按鈕和文本框又回來了作爲secureTextEntry光標被定位在字符串的末尾,但如果輸入了一個字符,則先前的字符串被刪除,只是新的文本被「保存」,並且我最終通過以編程方式將光標重新放置在textField的末尾並且完成了這個技巧。 – danypata

+0

@danypata不,我沒有真正嘗試它,所以它可能需要一點調整,因爲我不能確定替換將提供一個空字符串或新鍵入的字符。我會用這個更新答案。我實際上並沒有嘗試阻止安全文本字段的標準功能。 – Wain

3
做到這一點

最簡單的方法是實施委託的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; 
} 
0

嗯,我有,當我改變鍵盤類型,以4(數字我的密碼組合相同的情況下)+1(阿爾法),停止清算secureTextEntry

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
textField.keyboardType = UIKeyboardTypePhonePad; 
[textField reloadInputViews]; 

return YES; 
} 

它重新加載UITextField而不是它的文本,所以不清除文本它改變了鍵盤的字母數字編號,反之亦然。您可以將其用於您自己的功能。