Кнопка iphone UISearchBar Done всегда включена
У меня есть UIViewController с UISearchBar. Я заменил кнопку "Поиск" кнопкой "Готово".
Однако, если на панели поиска нажать кнопку, кнопка "Готово" будет отключена. Это происходит до тех пор, пока не будет введен какой-либо символ.
Я хочу сделать это, чтобы эта кнопка Done всегда была включена, так что, если я нажимаю на нее, я могу сразу же отпустить клавиатуру.
Любая помощь? это было бы высоко оценено.
У меня на UIViewController
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
return YES;
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchBar.text.length == 0)
{
//[self fixOrientation];
[searchBar resignFirstResponder];
}
else
{
NSLog(@"typed");
}
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar
{
NSLog(@"began"); // this executes as soon as i tap on the searchbar, so I'm guessing this is the place to put whatever solution is available
}
Ответы
Ответ 1
В настоящее время UISearchBar
соответствует UITextInputTraits
. Вы можете просто установить:
searchBar.enablesReturnKeyAutomatically = NO;
ПРЕДУПРЕЖДЕНИЕ: Пока этот компилятор для iOS 7.0, во время выполнения он будет сбой. Он работает только при >= 7.1.
Документы на этом не ясны, так как только с 7.1, UISearchBar
реализует протокол UITextInputTraits
, но не отмечен, так как версия iOS, принятая протоколом.
Ответ 2
Вы можете обойти это, перейдя по подзонам в UISearchBar, пока не найдете текстовое поле. Тогда это просто вопрос установки "enableReturnKeyAutomatically" на NO. Кстати, следующий код также полезен для установки типа клавиатуры.
// loop around subviews of UISearchBar
for (UIView *searchBarSubview in [searchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
// set style of keyboard
[(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
// always force return key to be enabled
[(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
}
@catch (NSException * e) {
// ignore exception
}
}
}
Ответ 3
Принятый ответ больше не работает, поэтому я создал свою собственную категорию, которая, похоже, работает:
@implementation UISearchBar (enabler)
- (void) alwaysEnableSearch {
// loop around subviews of UISearchBar
NSMutableSet *viewsToCheck = [NSMutableSet setWithArray:[self subviews]];
while ([viewsToCheck count] > 0) {
UIView *searchBarSubview = [viewsToCheck anyObject];
[viewsToCheck addObjectsFromArray:searchBarSubview.subviews];
[viewsToCheck removeObject:searchBarSubview];
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
// always force return key to be enabled
[(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
}
@catch (NSException * e) {
// ignore exception
}
}
}
}
Ответ 4
Для iOS 8 и выше вы можете использовать
[self.searchBar setReturnKeyType:UIReturnKeyDone];
[self.searchBar setEnablesReturnKeyAutomatically:NO];
Ответ 5
Пожалуйста, напишите, что следующий код может быть вам полезен:)
Эта кнопка поиска на дисплее кода, если у вас пустая строка.
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
[itemSearchBar setShowsCancelButton:YES];
UITextField *searchBarTextField = nil;
for (UIView *subView in self.itemSearchBar.subviews)
{
for (UIView *sndSubView in subView.subviews)
{
if ([sndSubView isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)sndSubView;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
return YES;
}
Ответ 6
На основе приложения "Карты", например, кажется, что у шаблона должна быть кнопка отмены рядом с текстовым полем, чтобы избавиться от клавиатуры. С учетом сказанного одно предложение может заключаться в том, что пользовательский UIButton
размещается прямо в этом углу, который выглядит так же, как кнопка "Готово".
Вид хакерского решения...
Надеюсь, это поможет!
Ответ 7
Простейший способ и сложность - просто поместить пробел при начале редактирования поиска
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
//Add a blank character to hack search button enable
searchBar.text = @" ";}
Ответ 8
Расширение для Swift:
extension UISearchBar {
var textField: UITextField? {
return getTextField(inViews: subviews)
}
private func getTextField(inViews views: [UIView]?) -> UITextField? {
guard let views = views else { return nil }
for view in views {
if let textField = (view as? UITextField) ?? getTextField(inViews: view.subviews) {
return textField
}
}
return nil
}
}
Использование:
searchBar.textField?.returnKeyType = .Done
searchBar.textField?.enablesReturnKeyAutomatically = false
Ответ 9
Простое и легкое решение для iOS 10 на XCode 8.3.3, хотя для его выяснения потребовалось некоторое время:)
@IBOutlet var searchBar: UISearchBar! {
didSet {
searchBar.returnKeyType = .done
searchBar.enablesReturnKeyAutomatically = false
}
}
Изменяет поиск. Включает выполнение, не вводя ничего в поле поиска. После этого → searchBar.resignFirstResponder() вот так:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}