Как добавить текстовое поле в 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;
}
Другие вопросы по тегам