OGeek|极客世界-中国程序员成长平台

标题: ios - 文本字段一个字符并自动更改为下一个文本字段?不起作用? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 15:53
标题: ios - 文本字段一个字符并自动更改为下一个文本字段?不起作用?

我有一个程序,其中有四个文本字段,每个文本字段只有一个字符的 OTP。当用户在一个文本字段中输入一个字符时,它应该自动移动到下一个文本字段。但由于某种原因,只有我的第一个文本字段能够执行此操作,并且它转到第三个文本字段而不是第二个。并且文本字段的其余部分无法执行从一个文本字段移动到另一个文本字段的自动操作。我使用文本字段委托(delegate)进行编码。下面给出的是我的代码。

- (BOOL)textFieldUITextField *)textField shouldChangeCharactersInRangeNSRange)range replacementStringNSString *)string
{
if (![string isEqualToString""]) {
    textField.text = string;
    if ([textField isEqual:self.firstOTP]) {
        [self.secondOTP becomeFirstResponder];
    }else if ([textField isEqual:self.secondOTP]){
        [self.thirdOTP becomeFirstResponder];
    }else if ([textField isEqual:self.thirdOTP]){
        [self.fourthOTP becomeFirstResponder];
    }else{
        [textField resignFirstResponder];
    }
    return NO;
}
return YES;
}

下面是我的代码,用于识别是否输入了一个字符。

-(BOOL)textFieldShouldBeginEditingUITextField *)textField{
if (textField.text.length > 0) {
    textField.text = @"";
}
return YES;
}

任何人都可以识别错误吗?



Best Answer-推荐答案


首先,确保为所有四个文本字段设置了 delegate。还要确保您的 socket 连接正确。

接下来,将 isEqual: 的用法更改为 ==。您实际上确实想在这里使用 == 因为您想比较指针,而不是查看两个对象在逻辑上是否相等。

如果用户将文本粘贴到文本字段中,您也会遇到问题。用户可以轻松输入多个字符。

- (BOOL)textFieldUITextField *)textField shouldChangeCharactersInRangeNSRange)range replacementStringNSString *)string {
    if (string.length > 0) {
        textField.text = [string substringToIndex:1];
        if (textField == self.firstOTP) {
            [self.secondOTP becomeFirstResponder];
        } else if (textField == self.secondOTP) {
            [self.thirdOTP becomeFirstResponder];
        } else if (textField == self.thirdOTP) {
            [self.fourthOTP becomeFirstResponder];
        } else {
            [textField resignFirstResponder];
        }

        return NO;
    }

    return YES;
}

关于ios - 文本字段一个字符并自动更改为下一个文本字段?不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200456/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) Powered by Discuz! X3.4