#ios #objective-c #character #uitextview
#iOS #objective-c #символ #uitextview
Вопрос:
У меня есть UITextView, в котором ввод символов ограничен 100 числами. Я могу отслеживать ввод символов с помощью TextView: shouldChangeTextInRange:replacementText: метод, когда текст вводится в текстовое представление с помощью клавиатуры. В моем случае также есть вероятность, что пользователь просто вводит символы в текстовый вид при нажатии кнопки без какого-либо прерывания работы клавиатуры. В таком случае вышеупомянутый метод делегирования не вызывается, и поэтому я не могу отслеживать количество символов в текстовом представлении и, таким образом, разрешать более 100 символов. Как следует обращаться с таким случаем? Пожалуйста, помогите.
Ответ №1:
Вы можете попробовать приведенный ниже код Swift 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!)
}
}
Ответ №2:
Насколько я понимаю, у вас есть пользовательские кнопки, которые добавляют некоторый текст к существующему текстовому полю, верно?
В этом случае вы можете реализовать метод проверки
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
}
}