为 UITextField 创建一个通用的下一个按钮



我正在尝试创建一个与textField的标签一起使用的下一个按钮。我在空类型方法中有一个:

for (UITextField *textField in self.view.subviews)
{
    if ([textField isKindOfClass:[UITextField class]])
    {
        if([textField isFirstResponder])
        {
            int i = _textFieldTag;  //starts as 0
            [[textField viewWithTag:i] resignFirstResponder];
            NSString *a = [(UITextField *)[textField viewWithTag:i] text];
            NSLog(@"TEXT 01 - %@", a);
            i = i + 1;
            NSLog(@"TAG 02 - %i", i);
            [[textField viewWithTag:i] becomeFirstResponder];
            NSString *b = [(UITextField *)[textField viewWithTag:i] text];
            NSLog(@"TEXT 02 - %@", b);
        }
    }
}

问题是,即使i递增 1,NSString *b也会返回 nil,并且不会像我期望的那样使该 textField 成为下一个响应者。

它们在那里,标签存在,但不知何故不接受 i 的新值。

有什么想法吗?

尝试替换来自以下位置的所有呼叫:

[textField viewWithTag:i]

自:

[self.view viewWithTag:i]

您应该询问视图 viewWithTag 而不是 UITextField。

你的逻辑不正确,正如@Greg所说,你需要使用[self.view viewWithTag:i]来获得正确的观点。此外,为 self.view 提供一个不同于任何文本字段标签的标签(您收到错误是因为 self.view 的默认标签为 0)。我认为您希望您的逻辑看起来像这样:

-(IBAction)nextField:(id)sender {
    int i;
    for (UITextField *textField in self.view.subviews) {
        if ([textField isKindOfClass:[UITextField class]] && [textField isFirstResponder]) {
            [textField resignFirstResponder];
            NSString *a = textField.text;
            NSLog(@"TEXT 01 - %@", a);
            //i = textField.tag + 1; // use this line if you don't want to go back to the first text field
            i = (textField.tag == 4)? 0 : textField.tag + 1; //use this line if you want to cycle back to the first text field when you are on the last one. Replace the 4 with whatever is your highest tag. This also assumes that the tag of the first text field is 0.  
        }
    }
    NSLog(@"TAG 02 - %i", i);
    [[self.view viewWithTag:i] becomeFirstResponder];
    NSString *b = [(UITextField *)[self.view viewWithTag:i] text];
    NSLog(@"TEXT 02 - %@", b);
}

最新更新