UITableViewCell с TextField и проверяет ввод - PullRequest
0 голосов
/ 08 октября 2011

В настоящее время я создаю UITableViewCell с UITextField в нем. При нажатии на текстовое поле я хочу вызвать созданную мной цифровую клавиатуру. И когда я печатаю, текстовое поле должно проверить ввод для меня; при щелчке в другом месте клавиатура должна быть отклонена.

Код:

UITableViewCell *sizeCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"sizeCell"];
sizeCell.textLabel.text = @"Size";
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)];
sizeField.text = @"0";
sizeField.textAlignment = UITextAlignmentRight;
sizeField.textColor = [UIColor colorWithRed:50.0/255.0 green:79.0/255.0 blue:133.0/255.0 alpha:1.0f];
sizeField.backgroundColor = [UIColor clearColor];
sizeField.keyboardType = UIKeyboardTypeDecimalPad;

[sizeCell.contentView addSubview:sizeField]; 

rows = [[NSArray arrayWithObjects:switchCell, typeCell, sizeCell, nil] retain];

Я пытался реализовать UITextFieldDelegate как:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
   [sizeField resignFirstResponder];
   return YES;
}

но клавиатура не исчезает ...

Как проверить ввод и закрыть клавиатуру?

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Вы никогда не устанавливаете делегата в своем текстовом поле, чтобы вызывался textFieldShouldReturn:. Убедитесь, что ваш класс соответствует UITextFieldDelegate, а затем выполните следующие действия:

...
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)];
sizeField.delegate = self; //This is important!
sizeField.text = @"0";
...
0 голосов
/ 08 октября 2011

Несколько замечаний:

  1. Как предложил другой участник, убедитесь, что вы правильно установили делегата клавиатуры.
  2. Если вы хотите отклонить клавиатуру при возврате клавиатуры, убедитесь, что она есть на вашей пользовательской клавиатуре, и она правильно настроена для вызова метода ...ShouldReturn.
  3. Если вы хотите отказаться от постукивания снаружи, вам придется сделать это самостоятельно.
  4. Вы объявляете sizeField внутри метода, в котором вы его настраиваете, а затем вызываете его из другого метода вне этой области.Я предполагаю, что у вас есть переменная класса с именем sizeField, или вы получите ошибку компилятора.Тем не менее, объявляя его снова, когда вы настраиваете его, как вы делаете, затенение объявления переменной класса, так что оно никогда не будет настроено.Кстати, это утечка памяти.
  5. Это не должно влиять на фактическое выполнение программы, если все остальное правильно (но это будет, если, например, проблема 4, а не исправлена), но я думаю, что лучше вместо этого вызвать [textField resign...][sizeField resign...].По крайней мере, вы должны assert(textField == sizeField).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...