Как добавить текстовое поле в inputAccessoryView и сделать textView первым респондентом
Мой код:
- (void)viewDidLoad {
[super viewDidLoad];
CGRect rectFake = CGRectZero;
UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake];
[self.view addSubview:fakeField];
UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)];
av.backgroundColor = [UIColor darkGrayColor];
CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0);
UITextField *textField = [[UITextField alloc] initWithFrame:rect];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.font = [UIFont systemFontOfSize:24.0];
textField.delegate = self;
[av addSubview:textField];
fakeField.inputAccessoryView = av;
[fakeField becomeFirstResponder];
}
Я пытался добавить
[textField becomeFirstResponder]
в конце, но это не работает.
Другая проблема, связанная с тем, что метод делегирования для скрытия клавиатуры при нажатии клавиши ENTER, также не работает.
- (BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
1 ответ
Решение
Я столкнулся с той же проблемой. Ваш (и мой первоначальный) подход, вероятно, не работает, потому что текстовое поле в inputAccessoryView
отказывается стать первым ответчиком, так как UITextField
изначально не находится на вашем экране.
Мое решение: проверить, когда появляется клавиатура (и вместе с тем вид аксессуара)!
Шаг 1) Прослушивание уведомления (убедитесь, что этот код выполняется, прежде чем вы хотите получить уведомление).
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(changeFirstResponder)
name:UIKeyboardDidShowNotification
object:nil];
Шаг 2) Когда клавиатура появилась, вы можете установить текстовое поле в inputAccessoryView
стать первым респондентом:
-(void)changeFirstResponder
{
[textField becomeFirstResponder]; // will return YES;
}