【发布时间】:2015-02-05 07:19:57
【问题描述】:
有没有办法限制文本字段而不是字符数?我想在到达字段末尾时停止输入。但是,由于不同的字符具有不同的尺寸,因此停在某个数量上并不是真正的解决方案。像“停在行尾”之类的东西会很完美。
这对我不起作用
【问题讨论】:
标签: xcode ipad ios7 swift uitextfield
有没有办法限制文本字段而不是字符数?我想在到达字段末尾时停止输入。但是,由于不同的字符具有不同的尺寸,因此停在某个数量上并不是真正的解决方案。像“停在行尾”之类的东西会很完美。
这对我不起作用
【问题讨论】:
标签: xcode ipad ios7 swift uitextfield
您要做的不是计算新字符串的最大字符数,而是计算它的宽度(以磅为单位)并将其与您需要的宽度进行比较。
[斯威夫特]
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
}
您可能需要编辑属性以使其在单行上呈现。
【讨论】:
订阅controlTextDidChange,通过
let s = NSString(string: <yourtext>)
let size = s.boundingRectWithSize(<#size: NSSize#>, options: <#NSStringDrawingOptions#>, attributes: <#[NSObject : AnyObject]?#>)
现在您可以检查文本是否太大了。
【讨论】:
shouldChange...绝对是更好的方式。
controlTextDidChange 在添加新字符后调用。您可以减少结果,但 Stephen 的示例更好,因为它通知您用户即将进行更改,您可以决定是否应允许更改。