В элементе управления UISearchBar есть способ изменить заголовок ключа поиска для клавиатуры для Done?
Изменение названия кнопки поиска UISearchBar/клавиатуры
Ответ 1
Для панели поиска с именем tablesearchbar:
// Set the return key and keyboard appearance of the search bar
for (UIView *searchBarSubview in [tableSearchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
[(UITextField *)searchBarSubview setReturnKeyType:UIReturnKeyDone];
[(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
}
@catch (NSException * e) {
// ignore exception
}
}
}
Ответ 2
Как и в iOS 7 beta 5, ответ Run Loop не работал у меня, но это произошло:
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
}
Ответ 3
По крайней мере, для iOS 8 просто:
[self.searchBar setReturnKeyType:UIReturnKeyDone];
Ответ 4
Еще один полезный намек на код Run Loop (в разделе "@try" ).
Эта кнопка активирована "Готово", когда текстовое поле пуст:
UITextField *tf = (UITextField *)searchBarSubview;
tf.enablesReturnKeyAutomatically = NO;
Ответ 5
Для Swift для изменения ключа возврата UISearchBar
searchBar.returnKeyType = UIReturnKeyType.Done
перечисление доступно ниже
public enum UIReturnKeyType : Int {
case Default
case Go
case Google
case Join
case Next
case Route
case Search
case Send
case Yahoo
case Done
case EmergencyCall
@available(iOS 9.0, *)
case Continue
}
Ответ 6
Поскольку это протокол с дополнительными методами, вы должны тестировать каждый метод отдельно, а не на try-catching.
for (UIView *searchBarSubview in searchBar.subviews)
{
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)])
{
// keyboard appearance
if ([searchBarSubview respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
// return key
if ([searchBarSubview respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarSubview setReturnKeyType:UIReturnKeyDone];
// return key disabled when empty text
if ([searchBarSubview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarSubview setEnablesReturnKeyAutomatically:NO];
// breaking the loop when we are done
break;
}
}
Это будет работать для iOS <= 6. Для iOS >= 7 вам нужно зациклиться на searchBar.subviews[0].subviews
.
Ответ 7
Так как клавиатура Alert-стиля является полупрозрачной, я могу видеть мой взгляд за ней. Это не выглядит очень хорошо, поскольку у меня есть несколько элементов за клавиатурой, что затрудняет выделение клавиш. Мне нужна черная клавиатура.
Итак, я изменил черный UIImageView на позицию за клавиатурой, когда текст редактируется. Это дает появление полностью черной клавиатуры.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
blackBoxForKeyboard.frame = CGRectMake(0, 377, 320, 216);
[UIView commitAnimations];
}
Ответ 8
Я попробовал все приведенные здесь решения, и ни один из них не работал для моего UISearchBar (компиляция xcode5 для iOS7). Я закончил с этой рекурсивной функцией, которая работала для меня:
- (void)fixSearchBarKeyboard:(UIView*)searchBarOrSubView {
if([searchBarOrSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
if ([searchBarOrSubView respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarOrSubView setKeyboardAppearance:UIKeyboardAppearanceAlert];
if ([searchBarOrSubView respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarOrSubView setReturnKeyType:UIReturnKeyDone];
if ([searchBarOrSubView respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarOrSubView setEnablesReturnKeyAutomatically:NO];
}
for(UIView *subView in [searchBarOrSubView subviews]) {
[self fixSearchBarKeyboard:subView];
}
}
Затем я назвал его так:
_searchBar = [[UISearchBar alloc] init];
[self fixSearchBarKeyboard:_searchBar];
Ответ 9
Только для покрытия всех версий iOS:
NSArray *subviews = [[[UIDevice currentDevice] systemVersion] floatValue] < 7 ? _searchBar.subviews : _searchBar.subviews[0].subviews;
for (UIView *subview in subviews)
{
if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
{
UITextField *textField = (UITextField *)subview;
[textField setKeyboardAppearance: UIKeyboardAppearanceAlert];
textField.returnKeyType = UIReturnKeyDone;
break;
}
}
Ответ 10
Просто напоминание! Если вы ищетеBar остается в качестве первого ответчика, после того, как вы измените returnKeyType, вам нужно убрать клавиатуру и снова всплывать, чтобы увидеть изменения.
search.resignFirstResponder()
searchBar.returnKeyType = UIReturnKeyType.Done
search.becomeFirstResponder()