【发布时间】:2014-03-21 15:21:34
【问题描述】:
模型问题:我想在文本字段的输入下自动将所有 1 转换为 0。
我尝试以下方法:
UITextField *textField = ...
textField.delegate = self.
textField.secureTextEntry = YES;
.......
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
BOOL ret = YES;
if ([string isEqualToString:@"1"]) {
NSString *text = @"0";
textField.text = [textField.text stringByAppendingString:text];
ret = NO;
}
return ret;
}
现在有两种情况:
1) 我们将焦点放在 textField 中,输入“1”然后输入“2”。结果:文本字段仅包含“2”,“1”消失。
2) 我们将焦点放在 textField 中,输入除“1”以外的任何内容(例如“3”),然后将其删除,然后输入“1”和“2”。现在我们看到文本字段包含“12”!
这些案例有什么区别?为什么在第一种情况下输入下一个符号后“1”会消失?
附:对不起,我忘了写 textField 的定义。密码类型非常重要!如果我们尝试使用普通的 textField,我的代码可以完美运行。
【问题讨论】:
-
由于您没有发布
replaceRange:withText:方法,因此没有人可以帮助您解决代码问题。 -
你是对的。抱歉,我已清除此方法,但使用之前评论过的另一种方法。他们也这样做。
-
1) 看我的回答。 2) 什么是
self.text,为什么您希望在设置字符串属性的值时更新文本字段(假设self.text是此视图控制器上的字符串属性)? -
顺便说一句 - 只有当用户没有将文本粘贴到文本字段中并且用户从未移动过插入符号时,您的代码才会起作用。
-
Does this answer help? 还是后来的那个?我认为问题在于 iOS 如何清除用户编辑时的安全文本字段,但如果我理解其中的细微差别,那就见鬼了。
标签: ios objective-c cocoa-touch uitextfield