【问题标题】:Swift: Limit Characters # in textField without disabling/interfering with other functionsSwift:在 textField 中限制字符 # 而不会禁用/干扰其他功能
【发布时间】:2016-01-22 05:38:48
【问题描述】:

我想限制用户可以在 textField 中使用的字符数。我从这个链接中获取了一个函数:Max length UITextField (Imanou Petit)

但是,在我的 viewDidLoad() 中,我有几个 textFields 我已经在引用委托,因为我希望键盘在用户按下键盘上的 Return 键时“返回”。我正在通过textFieldShouldReturn 这样做(我也有一个 touchesBegan 方法,但我希望用户也可以选择Return 键):

 func textFieldShouldReturn(textField: UITextField!) -> Bool {


 self.stuffOneTextField.resignFirstResponder()
    self.linkTextField.resignFirstResponder()
    self.descriptionTextField.resignFirstResponder()
    self.ogTextField.resignFirstResponder()
    self.priceTextField.resignFirstResponder()

    return true

}

如果我在下面的 viewDidLoad 中添加这个函数,那么键盘上的“Return”键不起作用,它会限制所有的文本字段(我有 5 个)。

 override func viewDidLoad() {
    super.viewDidLoad()


    self.stuffOneTextField.delegate = self
    self.linkTextField.delegate = self
    self.descriptionTextField.delegate = self
    self.ogTextField.delegate = self
    self.priceTextField.delegate = self
}

  func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    guard let text = textField.text else { return true }
    let newLength = text.characters.count + string.characters.count - range.length
        return newLength <= limitLength
   }

我只需要限制 2 个文本字段。我试过只输入特定的 textField 名称而不是所有 textFields 作为textFields 然后它限制了 1 个 textField 并且不允许我输入其他...非常奇怪...

我该如何解决这个问题?

任何帮助都意义重大。

【问题讨论】:

    标签: swift uitextfield character uitextfielddelegate


    【解决方案1】:

    您将获得textField,它正在更改委托函数中的字符。在这里,您可以将其与要限制的特定字段进行比较:

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        guard let text = textField.text else { return true }
        if !(textField == stuffOneTextField || textField == descriptionTextField) {
            return true
        }
        let newLength = text.characters.count + string.characters.count - range.length
        return newLength <= limitLength
    }
    

    另外,func textFieldShouldReturn(textField: UITextField!) -&gt; Bool 为您提供了一个文本字段,如果您想在该字段上调用resignFirstResponder(),您可以在该字段上调用。

    【讨论】:

    • 感谢您的回复。我在哪里指定要限制字符多长时间?对 newLength 常量和返回的内容感到困惑......这个方法放在哪里?在另一种方法中? @唐
    • 我已经更新了答案以表明这将在 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) 函数的主体中。返回的是一个布尔值,指示输入的字符串是否在您的大小限制 limitLength 之下。正如您在上面链接到的问题的答案一样,limitLength 是您的类中定义的常量。
    • 美丽。非常感谢。
    猜你喜欢
    • 2012-06-05
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2015-01-06
    • 2021-05-15
    • 2013-07-01
    相关资源
    最近更新 更多