Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField中的自动音译_Ios_Objective C_Cocoa Touch_Uitextfield - Fatal编程技术网

Ios UITextField中的自动音译

Ios UITextField中的自动音译,ios,objective-c,cocoa-touch,uitextfield,Ios,Objective C,Cocoa Touch,Uitextfield,模型问题:我想将文本字段中输入的所有1自动转换为0 我尝试以下方法: UITextField *textField = ... textField.delegate = self. textField.secureTextEntry = YES; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

模型问题:我想将文本字段中输入的所有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) 我们将焦点放在文本字段中,键入“1”,然后键入“2”。结果:文本字段仅包含“2”,“1”消失

2) 我们将焦点放在textField中,键入除“1”以外的任何内容(例如“3”),然后删除它,然后键入“1”和“2”。现在我们看到文本字段包含“12”

这些案例之间有什么区别?为什么在第一种情况下输入下一个符号后“1”消失


抱歉,我忘了写文本字段的定义。这是非常重要的,它是密码类型!如果我们尝试使用普通的文本字段,我的代码工作得很好。

我已经通过UIT输出协议解决了操作问题:

- (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)

没有人可以帮助您解决代码问题,因为您没有发布
replaceRange:withText:
方法。您是对的。很抱歉,我已清除此方法,但使用另一个以前评论过的方法。他们也这么做。1)看我的答案。2) 什么是
self.text
,当您设置字符串属性的值时(假设
self.text
是此视图控制器上的字符串属性),为什么您希望文本字段被更新?顺便说一句-只有当用户没有将文本粘贴到文本字段中并且用户从未移动插入符号时,您的代码才会起作用。还是几天后的那个?我认为问题在于iOS如何清除用户编辑时的安全文本字段,但我是否理解其中的细微差别。