在没有情节提要的情况下以编程方式在 UITextField 上调用 resignFirstResponder

Programatically calling resignFirstResponder on a UITextField without a storyboard

我有一个带有 UITextField 的自定义 UITableViewCell,它在自定义 class 中有变量。我没有使用故事板,所以我没有出口;我正在以编程方式执行此操作。

我在 UIViewController 中使用 textFieldDidEndEditing 来获取用户提供的值。

    public func textFieldDidEndEditing(_ textField: UITextField)
    {
        print("textvalue=\(textField.text!)")
    }

但是,如果点击导航栏按钮,则不会调用 textFieldDidEndEditing。我通常知道如果我的 UIViewController 上有一个插座和一个文本字段变量,我可以使用 resignFirstResponder 这可能会导致 textFieldDidEndEditing 被调用,但正如我所说我没有使用插座/故事板。

我的文本字段 UIViewController 上没有这个变量,所以我没有任何东西可以调用 resignFirstResponder

我想我可以在自定义 UITableViewCell 中调用 resignFirstResponder,但我无法访问我的模型。

可以通过使用 UITableViewDelegate 中的 tagsaccessibility 等标识符来识别您的文本字段,然后使用,

中创建单元格时设置 delegate
  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    cell.txtField.delegate = self

  }

  // then it will be called UITextFieldDelegate

  public func textFieldDidEndEditing(_ textField: UITextField)
  {

  }

或者您可以按照 subviews 的层次结构使用:

self.view.endEditing(true)