Как добавить текстовое поле в inputAccessoryView и сделать textView первым респондентом - PullRequest
8 голосов
/ 07 сентября 2011

Мой код:

- (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 Ответ

15 голосов
/ 03 января 2012

Я столкнулся с той же проблемой.Ваш (и мой первоначальный) подход, вероятно, не работает, поскольку текстовое поле в inputAccessoryView отказывается стать первым респондентом, поскольку UITextField изначально не находится на вашем экране.

Мое решение: проверьтепоявится клавиатура (и вместе с этим вспомогательное представление)!

Шаг 1) Прослушайте уведомление (убедитесь, что этот код выполняется, прежде чем вы хотите получить уведомление).

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(changeFirstResponder)
                                             name:UIKeyboardDidShowNotification 
                                           object:nil];

Шаг 2) Когда клавиатура появилась, вы можете установить текстовое поле в inputAccessoryView, чтобы стать первым респондентом:

-(void)changeFirstResponder
{
    [textField becomeFirstResponder];  // will return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...