是否有限制文本字段的方法,但不能通过字符数?我想停止输入字段结束时的输入功能。但是由于不同的角色有不同的维度,因此在某个数值上停止并不是真正的解决方案。像“停在线路末端”这样的东西将是完美的。UITextField - 限制文本长度不受字符数的限制
这不适合我
是否有限制文本字段的方法,但不能通过字符数?我想停止输入字段结束时的输入功能。但是由于不同的角色有不同的维度,因此在某个数值上停止并不是真正的解决方案。像“停在线路末端”这样的东西将是完美的。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 ...”命名的例子绝对是更好的方法。 – 2014-12-07 16:25:40
我只有一行文本框。我希望用户能够输入直到到达行的末尾。你的例子在这种情况下工作吗? – greg 2014-12-07 16:27:34
不是直接。 controlTextDidChange'在新的字符被添加后调用。你可以减少结果,但斯蒂芬的例子更好,因为它告诉你,用户是*关于*做出改变,你可以决定是否应该允许。 – 2014-12-07 16:33:29
嘿,我刚刚实施它,它似乎工作得很好。我只需要在“combinedString.size()。width> textField.bounds.size.width”这一点上将“>”翻到“<”。非常感谢你。 – greg 2014-12-07 19:08:40
@greg没问题!请投票给我的答案,并将其标记为已接受! (这对于未来获得帮助有很长的路要走) – 2014-12-07 19:13:10