UITextField 中的自动音译

Posted

技术标签:

【中文标题】UITextField 中的自动音译【英文标题】:Auto transliteration in UITextField 【发布时间】: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 如何清除用户编辑时的安全文本字段,但如果我理解其中的细微差别,那就见鬼了。 【参考方案1】:

我已经在 UITextInput 协议的帮助下解决了我的 OP 问题:

- (BOOL)changeRussianCharactersInRange:(NSRange)range replacementString:(NSString *)string

    if ([string isEqualToString:@"1"]) 
        string = @"0";
        [self replaceRange:self.selectedTextRange withText: string];
        
    else if (!string.length) 
        UITextPosition *start = [self positionFromPosition:self.beginningOfDocument offset:range.location];
        UITextPosition *end = [self positionFromPosition:start offset:range.length];
        UITextRange *textRange = [self textRangeFromPosition:start toPosition:end];
        [self replaceRange:textRange withText: string];
    
    else 
        [self replaceRange:self.selectedTextRange withText: string];
    

    return NO;

可以轻松地将这种方法扩展到任何音译案例,包括复制/粘贴操作(string.length > 1)

【讨论】:

以上是关于UITextField 中的自动音译的主要内容,如果未能解决你的问题,请参考以下文章

UITextField右对齐iOS 7

touchesBegan 不触发

UITableViewCell 中的 UITextField 使用自动布局

切换uitextf时停止键盘关闭

在不禁用上下文菜单的情况下管理 UITextfiled 上的长按?

使用 uitextfields 创建 uitableview 表单