【问题标题】:navigate through textfields浏览文本字段
【发布时间】:2026-02-01 08:55:01
【问题描述】:

我正在尝试使用我在这里找到的@PeyloW 代码How to navigate through textfields (Next / Done Buttons),但是当我按下键盘 return 按钮时,什么也没有发生。我的标签没问题。

标题:

- (BOOL)textFieldShouldReturn:(UITextField*)textField;

实施:

- (BOOL)textFieldShouldReturn:(UITextField*)textField {
    NSInteger nextTag = textField.tag + 1;
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];

    if (nextResponder) {
        [nextResponder becomeFirstResponder];
    } else {
        [textField resignFirstResponder];
    }
    return NO;
}

我错过了什么?我的键盘没有下一步完成,只有返回。请记住,我是 iOS 新手。

编辑:

我尝试通过添加断点来调试代码,但代码没有被触发。

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    我不喜欢包含标签的解决方案。相反,我会将所有输入文件按所需顺序放入一个数组中,并在-textFieldShouldReturn: 中使用给定的文本字段从数组中获取它的索引。然后我会在那个索引处获取对象。

    - (BOOL)textFieldShouldReturn:(UITextField*)textField {
        NSUInteger nextIndex = [arrayWithResponders indexOfObject:textField]+1 % [arrayWithResponders count];
        UIResponder* nextResponder = [arrayWithTextFields objectAtIndex: nextIndex];
    
        if (nextResponder) {
            [nextResponder becomeFirstResponder];
        } else {
            [textField resignFirstResponder];
        }
        return NO;
    }
    

    你刚刚补充说,断点没有被触发,所以很可能你没有设置委托。

    【讨论】:

    • 我该怎么做?我对 iOS 很陌生。
    • 当然还有:Apple's docs
    • 现在它正在工作。感谢您的提示和代码。而且我认为您是对的,将控件保留在数组中会占用更多内存,但更易于维护。
    • 如果我们不得不担心数组的内存消耗,我们都注定要失败......