【问题标题】:becomeFirstResponder do not display keyboard in swift 3becomeFirstResponder 不在 swift 3 中显示键盘
【发布时间】:2017-12-19 08:22:05
【问题描述】:

我有 4 个 TextField 对齐在一起,每个都有一个标签 (1, 2, 3, 4),它可以作为代码输入。我想确保当我点击或点击代码输入的当前字段时,它会将当前字段作为其第一响应者。

示例场景

1 _ _ _

如果我点击第一个文本字段的其他位置,它应该将焦点指向第一个文本字段

使用下面的代码我可以这样做,但问题是如果代码输入中没有当前的第一响应者,则键盘不会出现。

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField.tag != currentTag {
        let currentResponder = textField.superview?.viewWithTag(currentTag) as? UITextField
        currentResponder?.becomeFirstResponder()
    }
}

【问题讨论】:

  • 究竟是什么问题?点击文本字段时没有出现键盘?
  • 默认设置 currentTag = 1。我不确定我是否理解正确
  • @bhanupriya 是的,键盘没有出现,我想我在创建键盘之前就破坏了它,因为在成为第一响应者的过程中,我立即更改了第一响应者。我也想出答案。而不是使用 textFieldDidBeginEditing 我使用 textFieldShouldBeginEditing
  • 我的回答codefunc textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { if textField.tag != currentTag { let currentResponder = textField.superview?.viewWithTag(self.currentTag) as? UITextField currentResponder?.becomeFirstResponder() return false } return true }
  • 如果文本没有条件,则自动出现textfield,无需编写代码处理

标签: ios swift3 uitextfield becomefirstresponder


【解决方案1】:

这里我们的自定义响应器与点击文本字段的默认响应器重叠,所以我将其延迟 0.1 秒并调用响应器

斯威夫特 3

func textFieldDidBeginEditing(_ textField: UITextField) {
if textField.tag != currentTag {
    let currentResponder = textField.superview?.viewWithTag(currentTag) as? UITextField
    currentResponder?.perform(
                #selector(becomeFirstResponder),
                with: nil,
                afterDelay: 0.1
            )
    }
}

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多