2016-10-13 38 views
0

我有一個UITextView,其中字符條目限制爲100個數字。當文本通過鍵盤輸入到文本視圖時,我可以使用textView:shouldChangeTextInRange:replacementText:方法跟蹤字符條目。 在我的情況下,用戶只需將按鍵上的字符輸入到文本視圖中,而不會中斷任何鍵盤操作。在這種情況下,上述委託方法不會被調用,所以我無法跟蹤文本視圖中的字符數,因此允許超過100個字符。 這種情況應該如何處理?請幫忙。在未通過鍵盤輸入時跟蹤UITextview中的文本更改

回答

1

你可以試試下面斯威夫特3碼: -

@IBAction func buttonClicked(sender: AnyObject) { 
      self.textView.text = self.textView.text + "AA" //suppose you are trying to append "AA" on button click which would call the below delegate automatically 
     } 

//Below delegate of UITextViewDelegate will be called from keyboard as well as in button click 
func textViewDidChangeSelection(_ textView: UITextView) { 
     if textView.text.characters.count > 100 { 

      let tempStr = textView.text 
      let index = tempStr?.index((tempStr?.endIndex)!, offsetBy: 100 - (tempStr?.characters.count)!) 
      textView.text = tempStr?.substring(to: index!) 
     } 
    } 
0

據我所知,你有自定義按鈕,它將一些文本附加到textField的現有文本,對吧?

在這種情況下,你可以實現一個驗證方法

func validateString(string: String) -> Bool { 
    return string.characters.count <= 100 
} 

而且在shouldChangeCharactersInRange方法使用它和按鈕的回調:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { 
    let currentString: NSString = (textField.text ?? "") as NSString 
    let newString = currentString.replacingCharacters(in: range, with: string) 
    return validateString(string: newString) 
} 

@IBAction func buttonPressed() { 
    let newString = textField.text + "a" //replace this line with your updated string 
    if validateString(string: newString) { 
     textField.text = newString 
    } 
}