【问题标题】:Dismiss keyboard after a user entered 11 digit [duplicate]用户输入 11 位数字后关闭键盘 [重复]
【发布时间】:2018-12-24 18:20:28
【问题描述】:

我一直在网站中寻找解决方案,以在用户输入 11 位数字后关闭键盘。我在这里找到了一个Solution,但它是一个Objective-c,我正在寻找一个快速代码,有人可以帮忙吗?

【问题讨论】:

  • 首先,向我们展示你尝试了什么?
  • 从 Objective-C 转换是一项非常重要的现实世界技能 - 仍然/仅在 ObjC 中可用的代码如此之多,值得花时间尝试转换它
  • 你忘记自己试了还是放在这里
  • @MadProgrammer 我不想转换它!我正在寻找一个快速的!
  • @Am1rFT :/ 然后我建议你继续寻找 - 毫无疑问,有人会为你写一个 - 这不是 SO 的用途 - 没有冒犯

标签: ios swift dismiss


【解决方案1】:

这就是它的工作原理

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

   // YOU SHOULD FIRST CHECK FOR THE BACKSPACE. IF BACKSPACE IS PRESSED ALLOW IT

    if string == "" {
        return true
    }

    if let characterCount = textField.text?.count {
        // CHECK FOR CHARACTER COUNT IN TEXT FIELD
        if characterCount >= 11 {
            // RESIGN FIRST RERSPONDER TO HIDE KEYBOARD
            return textField.resignFirstResponder()
        }
    }
    return true
}

编辑

1) 您应该将 IBOutlet 设置为您的 textField

2) 在您的 textField 上将委托设置为 self。

3) YourViewController: UIViewController, UITextFieldDelegate { }

4) 如上实现委托方法。检查退格并允许用户输入退格从 textField 中删除字符。

【讨论】:

  • 为什么我们需要" shouldChangeCharactersIn range: NSRange, replacementString string: String "
  • 这是委托方法,它检查是否允许用户输入下一个字符。因此,当 textField 中的字符数超过 11 时,键盘将退出
  • 这是委托方法,它检查是否允许用户输入下一个字符。因此,当 textField 中的字符数超过 11 时,键盘将退出
  • 那么当我调用 func 时我应该用它们替换什么?
  • 你不必调用这个函数,它是 UITextField 的一个委托方法,你必须实现上面的委托方法,它会自动检查条件并做必要的事情。
【解决方案2】:

你可以试试这个:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let count: Int = textField.text?.count ?? 0
    if count >= 11 {
        textField.resignFirstResponder()
    }
    return true
}

【讨论】:

  • 它不起作用,因为虽然将调用委托,但 textField 不会包含全部更改。该代表询问开发人员,在给定下一个状态的情况下,开发人员是否会更改 UITextField 的先前状态。
  • 但是你下面写的代码和我回复的很像
  • 仔细检查我没有写任何答案。由于其他答案相同,它只是暗示这也行不通,因为代码不会说谎:)
  • 对不起,你没有写给别人。但是这段代码的问题仍然是什么,它应该可以按预期工作,在第 10 个字符之后,只要输入第 11 个字符,它就会隐藏键盘
猜你喜欢
  • 2018-01-23
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2022-01-24
  • 2016-08-26
相关资源
最近更新 更多