【问题标题】:Programatically calling resignFirstResponder on a UITextField without a storyboard以编程方式在没有情节提要的 UITextField 上调用 resignFirstResponder
【发布时间】:2019-06-20 06:38:15
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 当用户从键盘按下回车时是否会调用 textFieldDidEndEditing 方法?导航栏按钮是指后退按钮吗?
  • 是的,在不同行中的texrfields之间切换时确实会调用它,但不是从导航栏上的a按钮,
  • 您可以在DidSelectRow 中访问您的自定义UITableViewCell 以获取特定行并从那里调用resignFirstResponder
  • 谢谢,每次按键后不会关闭键盘吗?
  • 是的,也许您可​​以将单元格的索引路径保存在变量中,然后如果用户按下选项卡按钮调用 resignFirstResponder :let cell:CustomCell? = tableView.cellForRow(at: CustomPath) as? CustomCell cell?.textInput.resignFirstResponder() 这样如果按下按钮,它辞去最后一个被点击的单元格。这有意义吗?

标签: ios swift uitableview cocoa-touch uitextfield


【解决方案1】:

可以通过使用标识符(例如 tagsaccessibility 来自 UITableViewDelegate 来识别您的文本字段,然后使用可以使用)来实现,

在创建单元格时设置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)

【讨论】:

  • 嗯,你的意思是我在点击按钮时拨打self.view.endEditing(false)
  • 如果你在点击按钮时调用self.view.endEditing(true),它会关闭所有键盘,所以我希望它会在使用任何输入时调用 didEndEditing。
  • @Jules 是的,如果您像辞职键盘一样关闭视图上的进程,但取决于子视图的层次结构。
猜你喜欢
  • 2017-10-19
  • 2010-12-28
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
相关资源
最近更新 更多