2017-01-06 3 views
0

Есть что-то неожиданное, что я не могу разобраться. У меня есть alertController с textfields. Я пытаюсь получить строковое значение одного из них. Все работает нормально, когда длина строки меньше 11 символов. Выше этого порога строка равна null.UIAlertController: текстовое поле, не возвращающее строку

Может ли кто-нибудь дать мне подсказку о том, что происходит?

Только в случае, я положил мой код ниже:

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { 
     textField.placeholder = @"Name"; 
     textField.textColor = [UIColor blueColor]; 
     textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     textField.borderStyle = UITextBorderStyleRoundedRect; 
    }]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
     NSArray *textfields = alertController.textFields; 
     UITextField *nameTextfield = textfields[0]; 
     self.textFieldString = nameTextfield.text; 

     NSLog(@"self.textFieldString is: %@", self.textFieldString); // -> this returns a null value when the string length is > 11 


    }]]; 

Спасибо!

+0

У вас есть решения? –

+0

Еще нет, но у меня не было времени копать (больной ...). Я дам вам знать. Thx за вопрос! – Trichophyton

+0

Очевидно, проблема связана с «слабым» присвоением свойств, но я не могу понять, почему он работал с более короткой длиной строки. Загадка. Но спасибо за помощь! – Trichophyton

ответ

0

Вы уверены, что ^(UITextField *textField) и nameTextfield равны обоим, убедитесь, что вы получили текущее текстовое поле.

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { 
    **NSLog(@"%s", textField);** 
    textField.placeholder = @"Name"; 
    textField.textColor = [UIColor blueColor]; 
    textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    textField.borderStyle = UITextBorderStyleRoundedRect; 
}]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    NSArray *textfields = alertController.textFields; 
    UITextField *nameTextfield = textfields[0]; 
    **NSLog(@"%s", nameTextfield);** 
    self.textFieldString = nameTextfield.text; 

    NSLog(@"self.textFieldString is: %@", self.textFieldString); // -> this returns a null value when the string length is > 11 


}]]; 

Я изменил ваш код, запустил его, удостоверьтесь, что адрес тот же, что и друг.

+0

Да, это тот же адрес. И похоже, что это нормально, потому что нет никакой проблемы, когда моя строка меньше 12 символов. Я получаю сообщение об ошибке, когда длина строки превышает этот предел. Любое другое предложение? – Trichophyton

+0

Я заметил, что текст текстового поля (nameTextfield.text) в порядке, даже с более длинными строками, но только мой строковый атрибут (self.textFieldString) остается пустым, когда он пытается получить строку> 11 символов, как если бы было невозможно связать строка длиннее этой длины – Trichophyton

0
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"title" message:@"message" preferredStyle:UIAlertControllerStyleAlert]; 

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { 
    textField.placeholder = @"Name"; 
    textField.textColor = [UIColor blueColor]; 
    textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    textField.borderStyle = UITextBorderStyleRoundedRect; 
}]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    NSArray *textfields = alertController.textFields; 
    UITextField *nameTextfield = textfields[0]; 
    //  self.textFieldString = ; 

    NSLog(@"self.textFieldString is: %@", nameTextfield.text); // -> this returns a null value when the string length is > 11 


}]]; 
[self presentViewController:alertController animated:YES completion:nil]; 

Примечание: - Если вы добавить текстовые поля, то NSArray *textfields содержит больше текстовые поля. Таким образом, вы можете использовать тег для идентификации текстовых полей.

Смежные вопросы