2014-12-07 103 views

回答

2

你想要做的是什么,而不是计算新的字符串的字符的最大数量的工作,计算它在点宽度,并将其与宽度你需要。

[斯威夫特]

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 
} 

您可能需要编辑的属性得到它呈现在一行。

+0

嘿,我刚刚实施它,它似乎工作得很好。我只需要在“combinedString.size()。width> textField.bounds.size.width”这一点上将“>”翻到“<”。非常感谢你。 – greg 2014-12-07 19:08:40

+0

@greg没问题!请投票给我的答案,并将其标记为已接受! (这对于未来获得帮助有很长的路要走) – 2014-12-07 19:13:10

0

订阅controlTextDidChange并通过

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

计算文本的大小现在你可以检查,如果文本太大。

+0

斯蒂芬以“shouldChange ...”命名的例子绝对是更好的方法。 – 2014-12-07 16:25:40

+0

我只有一行文本框。我希望用户能够输入直到到达行的末尾。你的例子在这种情况下工作吗? – greg 2014-12-07 16:27:34

+0

不是直接。 controlTextDidChange'在新的字符被添加后调用。你可以减少结果,但斯蒂芬的例子更好,因为它告诉你,用户是*关于*做出改变,你可以决定是否应该允许。 – 2014-12-07 16:33:29