2014-08-22 6 views
1

Я пытаюсь использовать setInputAccessoryView в shouldChangeCharactersInRange методе. Но это не работает. Я могу только получить его работу в textFieldDidBeginEditingUITextField setInputAccessoryView in shouldChangeCharactersInRange метод

Я хочу AccessoryView показывать только когда пользователь что-то и не просто показать, когда пользователь вводит UITextField

Мой текущий код в textFieldDidBeginEditing

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 

     [textField setInputAccessoryView:tableView]; 
} 

Есть ли способ сделать это? Есть ли способ обхода, который я могу сделать?

Любая помощь очень ценится. Благодаря

+0

Вместо использования 'shouldChangeCharactersInRange' вы можете использовать собственный метод textFieldDidChange:', если он соответствует вашей цели. См. Мой ответ [ЗДЕСЬ] (http://stackoverflow.com/questions/25215742/to-enable-button-if-all-the-textfields-are-filled-in-ios/25216056#25216056), чтобы узнать, как вы можете , – n00bProgrammer

+0

@ n00bProgrammer textFieldDidChange: метод по-прежнему не показывает AccessoryView. Он вводит оператор if, когда пользователь вводит, но AccessoryView не показывает ... –

ответ

0

Вы можете добавить цель вашего текстового поля, как показано ниже

[your_textField addTarget:tableView action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged]; 

Здесь textFieldValueChanged: является пользовательский метод, где вы реализуете свой дальнейший код для просмотра таблицы

0

я не запустить тест с UITableView но я попытался установить UIToolbar в качестве дополнительного вида входа в textfield:shouldChangeCharactersInRange:replacementString:, и это было успешно. Вам понадобится флаг, который отслеживает, отображается ли вид аксессуара или нет, поэтому вы не запускаете код настройки более одного раза. Существование входного аксессуара проверяется только тогда, когда клавиатура должна быть представлена ​​так, что вам нужно сделать танец, где вы уходите в отставку, а затем становитесь первым ответчиком. Кроме того, для того, чтобы вид вспомогательного устройства ввода отображался сразу после первого нажатия клавиши, вам необходимо повторно отобразить текстовое поле.

- (BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string 
{ 

    if (!self.accessoryViewDisplayed) { 
     self.accessoryViewDisplayed = YES; 

     UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
     toolbar.translucent = NO; 
     toolbar.barTintColor = [UIColor greenColor]; 

     textField.inputAccessoryView = toolbar; 
     [textField resignFirstResponder]; 
     [textField becomeFirstResponder]; 
     [textField setNeedsDisplay]; 
    } 

    return YES; 
} 

Update

Подумав об этом дальше, вы можете настроить свой вход вид аксессуар в viewDidLoad и установите hidden в YES. Затем в методе делегата текстового поля вы можете просто установить флаг и отобразить вид вспомогательного входа, не требуя отставки/перехода на первый ответный танец.

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