Пользовательский 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];
}
Вероятно, не самый эффективный способ сделать это, но он делает свое дело. Я надеюсь, вы найдете то, что поможет вам решить вашу проблему.