Swift: 限制字符 # in textField without disabling/interfering with other functions
Swift: Limit Characters # in textField without disabling/interfering with other functions
我想限制用户可以在文本字段中使用的字符数。我从这个 link 中获取了一个函数:Max length UITextField (Imanou Petit)
但是,在我的 viewDidLoad() 中,我有几个文本字段,我已经引用了委托,因为当用户按下键盘上的 Return
键时,我希望键盘为 "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
s 然后它限制了 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!) -> Bool
为您提供了一个文本字段,您可以在上面调用 resignFirstResponder()
,如果您想在那里做的话。
我想限制用户可以在文本字段中使用的字符数。我从这个 link 中获取了一个函数:Max length UITextField (Imanou Petit)
但是,在我的 viewDidLoad() 中,我有几个文本字段,我已经引用了委托,因为当用户按下键盘上的 Return
键时,我希望键盘为 "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
s 然后它限制了 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!) -> Bool
为您提供了一个文本字段,您可以在上面调用 resignFirstResponder()
,如果您想在那里做的话。