Пользовательский InputView для UISearchBar не работает после нажатия кнопки отмены в iOS7

В моем iOS-приложении мне нужно установить пользовательский inputView за UISearchBar в iOS7,

Поэтому я написал следующие коды.

NSArray *searchBarSubViews = [[self.sBar.subviews objectAtIndex:0] subviews];
            for(int i =0; i<[searchBarSubViews count]; i++) {
                if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
                {
                    UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
                    [search setFont:[UIFont fontWithName:@"CustomFont" size:15]];
                    search.delegate = self;

                    [search setInputView:self.customKeyboard];
                    [self.customKeyboard setTextView:search];
                }
            }

Работает нормально. Однако, когда я печатаю с моей собственной клавиатуры и нажмите кнопку Отмена, чтобы resignFirstResponder,

И я нажимаю UISearchBar опять же, я не могу набрать текст UISearchBar, в том числе родная английская клавиатура.

А также кнопка отмены скрывает и UISearchBar больше не работает

Я не знаю, почему это происходит?

Как я могу решить это?

1 ответ

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

В моем приложении клавиатура меняется в соответствии с выбранной областью поиска:

  • сфера == 0 представляет мой CustomKeyboard
  • scope! = 0 представляет обычную клавиатуру iPhone.

Моя реализация вашего кода выглядит так:

-(UITextField *)textFieldFormSearchBar{

NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews];
for(int i =0; i<[searchBarSubViews count]; i++) {
    if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
    {
        UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
        return search;
    }
}
return nil;
}

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{

if (searchBar.selectedScopeButtonIndex==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
return YES;
}

-(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{

if (selectedScope==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
[self.textFieldFormSearchBar reloadInputViews];
}

-(BOOL)searchBarShouldEndEditing:(HDLSearchBar *)searchBar{

if (self.customKeyboard) {
    [self.customKeyboard removeFromSuperview];
}
return [self.textFieldFormSearchBar resignFirstResponder];
}

Вероятно, не самый эффективный способ сделать это, но он делает свое дело. Я надеюсь, вы найдете то, что поможет вам решить вашу проблему.

Другие вопросы по тегам