2014-12-07 104 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