UITextField secureTextEntry - 从YES转到NO,但是返回YES无效

Dav*_*d H 27 uitextfield

以上说明了一切 - 我将UITextField设置为安全,但希望为用户提供使其不安全的选项(这样他们就可以确定如果他们在私有区域中输入了什么).但是,假设他们错误地点击了切换,并希望将其更改回安全模式?这不起作用.我已经尝试了一切 - 使用-1而不是YES,删除文本然后将其放回去.我完全失去了其他想法.[输入rdar:// 9781908]

编辑:我认为这个问题从iOS5开始修复.

小智 47

它必须是输入焦点问题:当聚焦时,UITextField只能改变ON-> OFF.
尝试下一个技巧切换OFF-> ON:

textField.enabled = NO;
textField.secureTextEntry = YES;
textField.enabled = YES;
[textField becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)

编辑(dhoerl):在iOS 9.3中,我发现这有效,但是有一个问题.如果在普通视图中输入3个字符,则切换到安全文本,然后键入字符,3个预先存在的字符将消失.我尝试了各种技巧来清除,然后重置文本但没有成功.我终于尝试通过切割和粘贴来控制控件 - 粘贴到新切换到安全模式的工作非常棒.所以我在代码中模拟它,现在一切正常 - 不需要和响应者一起玩.这是我最终得到的结果:

    if textview should go into secure mode and the textfield is not empty {
        textField.text = ""
        textField.secureTextEntry = true

        UIPasteboard.generalPasteboard().string = password
        textField.paste(self)
        UIPasteboard.generalPasteboard().string = ""
    }
Run Code Online (Sandbox Code Playgroud)

我宁愿不必这样做,但如果你想要它无缝,这是我能找到它的唯一方法.


San*_*ndy 23

Mike R的解决方案很不错,但我更喜欢这种方法:

BOOL wasFirstResponder;
if ((wasFirstResponder = [passwordField isFirstResponder])) {
    [passwordField resignFirstResponder];
}
// In this example, there is a "show password" toggle
[passwordField setSecureTextEntry:![passwordField isSecureTextEntry]];
if (wasFirstResponder) {
    [passwordField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

这样你只在必要时再次成为FirstResponder.

  • 切换OFF ==> ON时,我是否只有一个错误?如果我输入新字母,则首先清除内容;-( (2认同)