【问题标题】:UITextField - Limit text lenght not by character countUITextField - 不按字符数限制文本长度
【发布时间】:2015-02-05 07:19:57
【问题描述】:

有没有办法限制文本字段而不是字符数?我想在到达字段末尾时停止输入。但是,由于不同的字符具有不同的尺寸,因此停在某个数量上并不是真正的解决方案。像“停在行尾”之类的东西会很完美。

这对我不起作用

Max length UITextField

【问题讨论】:

    标签: xcode ipad ios7 swift uitextfield


    【解决方案1】:

    您要做的不是计算新字符串的最大字符数,而是计算它的宽度(以磅为单位)并将其与您需要的宽度进行比较。

    [斯威夫特]

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        let combinedString = textField.attributedText!.mutableCopy() as NSMutableAttributedString
        combinedString.replaceCharactersInRange(range, withString: string)
        return combinedString.size().width > textField.bounds.size.width
    }
    

    您可能需要编辑属性以使其在单行上呈现。

    【讨论】:

    • 嘿,我刚刚实现了它,它似乎工作得很好。此时我只需将“>”翻转为“ textField.bounds.size.width”。非常感谢。
    • @greg 没问题!请对我的答案进行投票并将其标记为已接受! (这对将来获得帮助大有帮助)
    【解决方案2】:

    订阅controlTextDidChange,通过

    计算文字大小
    let s = NSString(string: <yourtext>)
    let size = s.boundingRectWithSize(<#size: NSSize#>, options: <#NSStringDrawingOptions#>, attributes: <#[NSObject : AnyObject]?#>)
    

    现在您可以检查文本是否太大了。

    【讨论】:

    • 斯蒂芬的例子订阅shouldChange...绝对是更好的方式。
    • 我有一个只有一行的文本字段。我希望用户能够输入,直到到达行尾。您的示例在这种情况下是否有效?
    • 不是直接的。 controlTextDidChange 在添加新字符后调用。您可以减少结果,但 Stephen 的示例更好,因为它通知您用户即将进行更改,您可以决定是否应允许更改。
    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多