Ограничение вставляемой длины строки в UITextView или UITextField

Как сказал Джон Феминелла, большую часть времени вы будете использовать == и! =, Потому что ваша цель - сравнить значения. Я просто хотел бы классифицировать то, что вы будете делать в остальное время:

Существует один и только один экземпляр NoneType, т.е. ни один не является синглтоном. Следовательно, foo == None и foo is None означают одно и то же. Тем не менее, тест is быстрее, и Pythonic соглашается использовать foo is None.

Если вы проводите некоторый самоанализ или разбираетесь со сборкой мусора или проверяете, работает ли ваш пользовательский встроенный гаджет для интернирования строк или тому подобное, то у вас, вероятно, есть вариант использования для foo: bar.

True и False также (в настоящее время) синглтоны, но для foo == True нет сценария использования и для foo is True.

7
задан Community 23 May 2017 в 11:46
поделиться

3 ответа

Мне удалось ограничить ввод и вставку текста, следуя методу textViewDidChange: в протоколе UITextViewDelegate.

- (void)textViewDidChange:(UITextView *)textView
{
    if (textView.text.length >= 10)
    {
        textView.text = [textView.text substringToIndex:10];
    }
}

Но я все еще считаю этот вид уродливого взлома, и, похоже, Apple следует предоставили какое-то свойство "maxLength" для UITextFields и UITextViews.

Если кому-то известно о лучшем решении, сообщите об этом.

10
ответ дан 6 December 2019 в 08:16
поделиться

Один из ответов на первый вопрос, на который вы указали ссылку выше, должен сработать, а именно использовать что-то вроде

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(limitTextField:) name:@"UITextFieldTextDidChangeNotification" object:myTextField];

, чтобы отслеживать изменения текста в UITextField и при необходимости сокращать его.

0
ответ дан 6 December 2019 в 08:16
поделиться

По моему опыту, просто реализация метода делегирования:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

работает с вставкой. Вся вставленная строка встречается в аргументе replaceString :. Просто проверьте его длину, и если она больше вашей максимальной длины, просто верните NO из этого метода делегата. При этом ничего не будет вставлено. В качестве альтернативы вы можете подставить его, как предлагалось ранее, но это работает, чтобы предотвратить вставку вообще, если она слишком длинная, если вы этого хотите.

При этом ничего не будет вставлено. В качестве альтернативы вы можете подставить его, как предлагалось ранее, но это работает, чтобы предотвратить вставку вообще, если она слишком длинная, если вы этого хотите.

При этом ничего не будет вставлено. В качестве альтернативы вы можете подставить его, как предлагалось ранее, но это работает, чтобы предотвратить вставку вообще, если она слишком длинная, если вы этого хотите.

7
ответ дан 6 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: