小编典典

如何浏览文本字段(下一步/完成按钮)

all

如何使用 iPhone 键盘上的“下一步”按钮浏览所有文本字段?

最后一个文本字段应关闭键盘。

我已经设置了 IB 按钮(下一步/完成),但现在我被卡住了。

我实现了 textFieldShouldReturn 操作,但现在 Next 和 Done 按钮关闭了键盘。


阅读 184

收藏
2022-03-13

共1个答案

小编典典

在 Cocoa for Mac OS X
中,您有下一个响应者链,您可以在其中询问文本字段接下来应该关注哪个控件。这就是使文本字段之间的制表符起作用的原因。但由于 iOS
设备没有键盘,只有触控,所以这个概念在向 Cocoa Touch 的过渡中没有幸存下来。

无论如何,这很容易做到,有两个假设:

  1. 所有的 “tabable”UITextField都在同一个父视图上。
  2. 它们的“标签顺序”由标签属性定义。

假设你可以覆盖 textFieldShouldReturn: 如下:

-(BOOL)textFieldShouldReturn:(UITextField*)textField
{
  NSInteger nextTag = textField.tag + 1;
  // Try to find next responder
  UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
  if (nextResponder) {
    // Found next responder, so set it.
    [nextResponder becomeFirstResponder];
  } else {
    // Not found, so remove keyboard.
    [textField resignFirstResponder];
  }
  return NO; // We do not want UITextField to insert line-breaks.
}

添加更多代码,假设也可以忽略。

斯威夫特 4.0

 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let nextTag = textField.tag + 1
    // Try to find next responder
    let nextResponder = textField.superview?.viewWithTag(nextTag) as UIResponder!

    if nextResponder != nil {
        // Found next responder, so set it
        nextResponder?.becomeFirstResponder()
    } else {
        // Not found, so remove keyboard
        textField.resignFirstResponder()
    }

    return false
}

如果文本字段的超级视图将是 UITableViewCell 那么下一个响应者将是

let nextResponder = textField.superview?.superview?.superview?.viewWithTag(nextTag) as UIResponder!
2022-03-13