2016-07-19 3 views
0

У меня есть UITextField, и я хочу, чтобы он имел максимальную длину текста 20. Таким образом, я позволяю себе (текущий контроллер вида) соглашаться с <UITextFieldDelegate> и устанавливать само собой в качестве делегата текстового поля, а также использовать следующий метод, чтобы установить максимальную длину:textField: shouldChangeCharactersInRange: replacementString: не вызывается при вводе в UITextField

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == self.nickNameTextField) 
    { 
     if (textField.text.length > 20) 
      return NO; 
    } 

    return YES; 
} 

Однако, когда я вставляю контрольную точку в этой функции я обнаружил, что эта функция не была вызвана, когда я напечатал в любых словах, много меньше, если длина текста превышает 20. Может ли кто-нибудь сказать мне, почему?

+0

Проверьте, правильно ли настроен делегат для 'UITextField'. Также я предлагаю вам использовать тег вместо имени. –

+0

@ManjulShrestha yeah Я установил делегат текстового поля в 'viewDidLoad' – Caesar

+0

Как вы создаете экземпляр своего текстового поля? –

ответ

0

Ну, я понял проблему. Я использую эту грамматику, чтобы создать экземпляр UITextField:

self.nickNameTextField.delegate = self; 
self.nickNameTextField = ({ 
    UITextField *textField = [UITextField new]; 
    textField.placeholder = [BBTCurrentUserManager sharedCurrentUserManager].currentUser.nickName; 
    textField.textAlignment = NSTextAlignmentLeft; 
    textField.backgroundColor = [UIColor lightGrayColor]; 
    textField; 
}); 

Первоначально я поставил делегат текстового поля за пределами скобок (например, код выше). Но когда я двигаю self.nickNameTextField.delegate = self; внутри фигурных скобок, тогда это сработало. Однако я понятия не имею, почему это произошло, может кто-нибудь сказать мне, почему?

0

Возможно, вы не связали свое текстовое поле с делегатом Щелкните правой кнопкой мыши на textField, который вы хотите делегировать, и перетащите textField на viewcontroller и оставьте его, чтобы выбрать делегат.

+0

Ну, я создал текстовое поле программно – Caesar

0

Я покажу вам шаги и скриншот для подключения textField и делегирования с помощью XIB или раскадровки.

В раскадровке

ШАГ 1: Нажмите TextField enter image description here

ШАГ 2: Перетащите TextField к ViewController enter image description here

ШАГ 3: Нажмите кнопку "контроль + мышь" на TextField, чтобы ViewController. ч и линии enter image description here

ШАГ 4: теперь появится окно с полем TextField enter image description here

ШАГ 5: Щелкните правой кнопкой мыши на текстовое поле в ViewController enter image description here

ШАГ 6: Hook Up Делегат ViewController enter image description here

Если вы хотите программно создать текстовое поле

UITextField *txtfldMaxLength = [[UITextField alloc] initWithFrame:CGRectMake(30, 100, 250, 50)]; 
txtfldMaxLength.borderStyle = UITextBorderStyleRoundedRect; 
txtfldMaxLength.textColor = [UIColor blackColor]; 
txtfldMaxLength.backgroundColor = [UIColor clearColor]; 
txtfldMaxLength.font = [UIFont systemFontOfSize:17]; 
txtfldMaxLength.placeholder = @"enter something"; 
txtfldMaxLength.autocorrectionType = UITextAutocorrectionTypeNo; 
txtfldMaxLength.keyboardType = UIKeyboardTypeDefault; 
txtfldMaxLength.returnKeyType = UIReturnKeyDone; 
txtfldMaxLength.clearButtonMode = UITextFieldViewModeWhileEditing; 
txtfldMaxLength.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
txtfldMaxLength.delegate = self; 
[self.view addSubview:txtfldMaxLength]; 
Смежные вопросы