我怎样在Swift中限制不同的UITextFields的文本长度?

7 浏览
0 Comments

我怎样在Swift中限制不同的UITextFields的文本长度?

我正在开发一个基于Xcode 7.3和Swift2的iOS项目。项目中有不同的UITextFields,这些文本框的输入限制为3位数字。它们都已经分配给了UITextFieldDelegate,并且运行良好。

下面是我限制长度的部分代码:

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

let limitLength = 3

if newLength > limitLength {

return false

}

let numberOnly = NSCharacterSet.init(charactersInString: "0123456789")

let stringFromTextField = NSCharacterSet.init(charactersInString: string)

let strValid = numberOnly.isSupersetOfSet(stringFromTextField)

return strValid

}

然而,有些UITextFields需要限制为单个数字。我该如何在上面的代码中为这些特定的UITextFields添加这个限制呢?

需要限制为单个数字的UITextFields的名称是:

widthInches
lengthInches

我试过将以下代码放在第一个guard语句后面,但没有成功:

guard let text2 = widthInches.text else { return true }

let newLength2 = text2.characters.count + string.characters.count - range.length

let limitLength2 = 3

if newLength2 > limitLength2 {

return false

}

0
0 Comments

在Swift中如何限制不同的UITextFields的文本长度?

在Swift中,我们可以通过实现UITextFieldDelegate协议中的textField(_:shouldChangeCharactersInRange:replacementString:)方法来限制不同的UITextFields的文本长度。

首先,我们需要在当前控制器中设置UITextField的代理为self,以便我们可以实现UITextFieldDelegate协议中的方法。

接下来,我们可以在textField(_:shouldChangeCharactersInRange:replacementString:)方法中获取到触发该事件的textField,并检查它是否等于我们想要限制文本长度的UITextField。如果是,我们可以根据需要进行不同的行为。

以下是一个示例代码:

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var textField1: UITextField!

@IBOutlet weak var textField2: UITextField!

override func viewDidLoad() {

super.viewDidLoad()

textField1.delegate = self

textField2.delegate = self

}

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

if textField == textField1 {

let maxLength = 10

let currentText = textField.text ?? ""

let newText = (currentText as NSString).replacingCharacters(in: range, with: string)

return newText.count <= maxLength

} else if textField == textField2 {

let maxLength = 5

let currentText = textField.text ?? ""

let newText = (currentText as NSString).replacingCharacters(in: range, with: string)

return newText.count <= maxLength

}

return true

}

}

在上面的示例中,我们有两个UITextField:textField1和textField2。我们分别将它们的代理设置为self,并在textField(_:shouldChangeCharactersInRange:replacementString:)方法中检查触发事件的textField是否等于我们想要限制长度的UITextField。然后,我们根据需要设置不同的maxLength,并使用NSString的replacingCharacters(in:with:)方法来获取替换后的新文本。最后,我们将新文本的长度与maxLength进行比较,并返回布尔值来限制文本长度。

希望这对你有所帮助!

0
0 Comments

问题的出现原因是需要限制不同的UITextField中的文本长度。解决方法是使用函数shouldChangeCharactersInRange来判断当前的textField是否是需要限制长度的textField,并根据不同的textField设置不同的限制长度。如果新的长度超过限制长度,则返回false,否则返回true。

解决方法的具体代码如下:

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

guard let text = textField.text else { return true }

var limitLength = 3

if textField == widthInches || textField == lengthInches {

limitLength = 1

}

let newLength = text.characters.count + string.characters.count - range.length

if newLength > limitLength {

return false

}

let numberOnly = NSCharacterSet.init(charactersInString: "0123456789")

let stringFromTextField = NSCharacterSet.init(charactersInString: string)

let strValid = numberOnly.isSupersetOfSet(stringFromTextField)

return strValid

}

除了上述方法,还可以通过子类化UITextField并添加limitLength字段来实现限制长度的功能,但对于只有两个例外的情况来说,这可能有点过度。因此,使用函数shouldChangeCharactersInRange来判断并设置不同的限制长度是比较合适的方法。

感谢原作者的建议,这种方法非常合理。作者还提到自己需要更多的UITextField来限制长度,可以使用switch语句来设置多个UITextField的限制长度,这样可以很好地解决问题。

0
0 Comments

问题的原因是使用了自定义的UITextField,而不是普通的UITextField,导致无法使用常规的方法来限制文本长度。解决方法是通过为UITextField设置tag属性,然后使用UITextFieldDelegate中的shouldChangeCharactersInRange方法来限制文本长度。

具体的解决方法是在UITextFieldDelegate中实现shouldChangeCharactersInRange方法,并根据UITextField的tag属性来判断要限制的文本框。通过设置maxLength变量来指定文本的最大长度,然后使用currentString.stringByReplacingCharactersInRange方法将新输入的字符串添加到当前字符串中,并检查新字符串的长度是否小于等于最大长度。最后返回true表示允许输入,返回false表示不允许输入。

同时,有其他用户提到他之前并不知道可以给UITextField添加tag属性,并在UITextFieldDelegate中使用它。他表示会在以后的开发中进一步研究这个功能。这个解决方法对他非常有帮助。

,问题的原因是使用了自定义的UITextField,而解决方法是通过设置tag属性并在UITextFieldDelegate中实现shouldChangeCharactersInRange方法来限制文本长度。这个方法对于需要限制不同UITextField文本长度的情况非常有用。

0