当前位置: 首页 > 面试题库 >

UITextField在Swift中设置最大字符长度

赖浩荡
2023-03-14
问题内容

如何覆盖此UITextField函数,使其对最大字符数有所限制?

override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {

}

我已经对堆栈进行了一些研究,但是我只能找到此函数(请参见下文)。首先,我看不到如何覆盖,其次,它使用NSRange作为具有UITextRange的参数。如何实现呢?谢谢

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
                replacementString string: String) -> Bool {
        let currentString: NSString = textField.text! as NSString
        let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
        return newString.length <= 4
    }

我失败的尝试:

override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {
        let currentString: NSString = self.text! as NSString
        let newString: NSString = currentString.replacingCharacters(in: range, with: text) as NSString
        return newString.length <= 4
    }

错误:无法将类型“ UITextRange”的值转换为预期的参数类型“ NSRange”(又名“ _NSRange”)


问题答案:

您可以子类化UITextField并为UIControlEvents
editedChanged添加一个目标。在选择器方法内部,您可以使用集合方法前缀来限制添加到textfield text属性中的字符,如下所示:

import UIKit
class LimitedLengthField: UITextField {
    var maxLength: Int = 10
    override func willMove(toSuperview newSuperview: UIView?) {
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        editingChanged()
    }
    @objc func editingChanged() {
        text = String(text!.prefix(maxLength))
    }
}

您可以通过编程或使用界面构建器添加自定义文本字段:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let limitedLenghtField = LimitedLengthField(frame: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 200, height: 50)))
        limitedLenghtField.text = "123456789012345"
        view.addSubview(limitedLenghtField)
    }
}


 类似资料:
  • 问题内容: 我知道还有其他主题,但似乎无法找到实现方法。 我试图将UITextField限制为仅5个字符 最好是字母数字和-和。和_ 我看过这段代码 和 我只是不知道如何实际实现它,或者我应该换成我的自定义UITextField换成哪个“ textfield” 问题答案: 您的视图控制器应符合,如下所示: } 设置文本字段的委托: 在您的视图控制器中实现该方法: 全部一起: 对于Swift 4 只

  • 问题内容: 我想设置允许在a 和a中键入的最大字符数。然后,该数字将显示在一个小标签中(供用户参考,Twitter风格。) 问题答案: 更新 Swift 4.X 试试看:

  • 问题内容: 当我尝试过时如何设置可以使用swift输入到UITextField中的最大字符数?,我看到如果我全部使用10个字符,我也无法删除该字符。 我唯一能做的就是取消该操作(一起删除所有字符)。 有谁知道如何不遮挡键盘(以便我不能添加其他字母/符号/数字,但可以使用退格键)? 问题答案: 对于Swift 5和iOS 12,请尝试以下协议实现方法的实现: 该代码最重要的部分是从()到()的转换。

  • 问题内容: 在Swift中,是否可以将最大INT值设置为UITextField? 我的用例是我有5个文本字段,它们需要具有最大的int值。这些值的范围从500一直到10,000。5个不同的文本字段中的每个字段将具有不同的最大值。我不能使用选择器或下拉列表,因为增量将是1。UISlider太难了,无法“擦入”数字。 如果最大int值为5,000,则用户不能(在数字键盘的键盘类型上)输入大于5000的

  • 我得到的问题是,我希望它能够在5个字母最多,有谁可以告诉我如何做到这一点? 谢谢

  • 问题内容: 我想将这个大字符串分成几行,每行中的内容不应超过MAX_LINE_LENGTH个字符。 到目前为止我尝试过的 输出: 它造成 断字 。我不要这个 而不是我想要这样的输出: 添加了另一个条件: 如果单词长度大于MAX_LINE_LENGTH,则该单词应拆分。 解决方案应该没有外部罐子的帮助。 问题答案: 只需逐个单词地遍历字符串,并在单词超过限制时中断。 我只是以徒手的方式输入了该内容,