我有一个在显示/隐藏模式之间切换的按钮(即在secureTextEntry NO和YES之间切换UITextField).其目的是允许用户查看他们输入的密码.
我在这里跟踪了这个例子(投票数最多):UITextField secureTextEntry - 从YES转到NO,但是改回YES没有效果
但是,当我将secureTextEntry设置为NO时,在那里写入的任何文本最后都会有一个空格.将secureTextEntry设置为YES时,这似乎不是问题.
例如,如果我在setSecureTextEntry设置为NO时输入文本"mypassword",然后将其切换为YES,则用户将看到**********(10个点),这是正确的.如果我将SecureTextEntry设置为NO,则用户将看到"mypassword"(末尾有空格,或者至少光标向右移动一个空格).
重要说明: 在调试器中,文本的字符串值显示没有尾随空格,如下所示:
(lldb) expr self.passwordText.text
(NSString *) $0 = 0x1d8450e0 @"mypassword"
Run Code Online (Sandbox Code Playgroud)
我试过修剪空格(避免在UITextField中使用中间空格),但它没有效果.
sun*_*nus 41
我刚遇到这个案子,最后解决了这个问题.
适用于最新的iOS SDK,iOS 8.1
首先,根本没有尾随空间.
点(以SecureEntry显示)字符和普通字符具有不同的宽度,在切换isSecureEntry开关后,光标没有刷新它的位置.
所以我用这个解决方法来解决这个问题.
- (void)toggle
{
NSString *tmpString;
[self.passwordTextField setSecureTextEntry:!self.passwordTextField.isSecureTextEntry];
if (self.passwordTextField.isSecureTextEntry) {
// do stuffs
} else {
// do other stuffs
}
// Workaround to refresh cursor
tmpString = self.passwordTextField.text;
self.passwordTextField.text = @" ";
self.passwordTextField.text = tmpString;
}
Run Code Online (Sandbox Code Playgroud)
Swift 3+
// Workaround to refresh cursor
let currentText: String = self.userPassword.text!
self.userPassword.text = "";
self.userPassword.text = currentText
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
Mat*_*hew 13
PRE-iOS-8.0 (日期解决方案) ...在按钮的操作方法中(在secureTextEntry
YES和NO 之间切换),只需将UITextField
's text
属性设置为其当前text
值即可.虽然这可能看起来多余而且有点像黑客,但这会将光标重新绘制在正确的位置.这是一个关于你的按钮的动作方法现在应该是什么样子的例子......
-(void)toggleButtonPressed:(UIButton*)sender
{
// Toggle between secure and not-so-secure entry
self.toggleButton.selected = !self.toggleButton.selected;
self.textfield.secureTextEntry = !self.toggleButton.selected;
// * Redundant (but necessary) line *
[self.textfield setText:self.textfield.text];
}
Run Code Online (Sandbox Code Playgroud)
后的iOS 8.0 ...作为的iOS 8.0的,看来UITextField
的text
二传手不再重新绘制光标时等于其当前字符串值的字符串调用.现在,我们需要更进一步,并text
在重新重置之前实际更改值.用setText:
这些行替换上面的行.
// * Extra redundant (but necessary) lines *
NSString *currentText = self.textfield.text;
[self.textfield setText:@"Arbitrary string..."]; // Change the value
[self.textfield setText:currentText]; // Reset the value
Run Code Online (Sandbox Code Playgroud)
我有一个干净的解决方案,不会肮脏的text
财产UITextField
.
用这种风格包裹它们.
[self.passwordTextField resignFirstResponder]; // first resign its first responder.
// change `secureTextEntry` property's value if necessary.
if (self.passwordTextField.secureTextEntry) {
self.passwordTextField.secureTextEntry = NO;
self.passwordEcryptButton.selected = YES;
}else{
self.passwordTextField.secureTextEntry = YES;
self.passwordEcryptButton.selected = NO;
}
[self.passwordTextField becomeFirstResponder]; // finally gain its first responder again.
Run Code Online (Sandbox Code Playgroud)
为了解决iOS中的这个错误,您可以简单地执行以下操作(适用于任何iOS版本):
- (IBAction)toggleSecureTextEntry:(UIButton *)button
{
self.textField.secureTextEntry = !self.textField.secureTextEntry;
NSString *originalText = self.textField.text;
self.textField.text = nil;
self.textField.text = originalText;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8920 次 |
最近记录: |