por inicio home flotante desactivar control como boton assistive activar iphone keyboard uisearchbar first-responder

inicio - como desactivar el boton home del iphone



El botón de iphone UISearchBar Done siempre está habilitado (9)

Tengo un UIViewController con UISearchBar. He reemplazado el botón Buscar por un botón Listo.

Sin embargo, cuando se toca en la barra de búsqueda, el botón Hecho se desactiva inicialmente. Esto ocurre hasta que uno entra a cualquier personaje.

Lo que quiero hacer es tener este botón Hecho siempre habilitado, de modo que si toco sobre él puedo descartar el teclado inmediatamente.

¿Alguna ayuda? sería muy apreciado.

Tengo en mi 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 }


Basado en la aplicación Mapas, por ejemplo, parece que el patrón debería ser tener un botón de cancelar cerca del campo de texto para deshacerse del teclado. Dicho esto, una sugerencia podría ser tener un UIButton personalizado colocado en esa esquina que se parece al botón Listo.

Una especie de solución hacky ...

¡Espero que esto ayude!


Extensión para 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 } }

Uso:

searchBar.textField?.returnKeyType = .Done searchBar.textField?.enablesReturnKeyAutomatically = false


Hoy en día UISearchBar ajusta a UITextInputTraits . Usted puede simplemente configurar:

searchBar.enablesReturnKeyAutomatically = NO;

ADVERTENCIA: mientras esto compila para iOS 7.0, se bloqueará en el tiempo de ejecución. Solo funciona para> = 7.1.

Los documentos no están claros en este caso, ya que solo desde 7.1, UISearchBar implementa el protocolo UITextInputTraits , pero no se menciona desde qué versión de iOS se adoptó el protocolo.


La respuesta aceptada ya no parece funcionar, así que hice mi propia categoría que parece funcionar:

@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 } } } }


Para iOS 8 y superior, puedes usar

[self.searchBar setReturnKeyType:UIReturnKeyDone]; [self.searchBar setEnablesReturnKeyAutomatically:NO];


Por favor escriba el siguiente código puede ser útil para usted :)

Este código muestra el botón de búsqueda si tiene una cadena vacía.

- (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; }


Puede evitar esto haciendo un bucle alrededor de las subvistas en UISearchBar hasta que encuentre el campo de texto. Es solo cuestión de establecer "enableReturnKeyAutomatically" en NO. Por cierto, el siguiente código también es útil para configurar el tipo de teclado.

// 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 } } }


Solución simple y fácil para iOS 10 en XCode 8.3.3, aunque tardó un tiempo en descifrarlo :)

@IBOutlet var searchBar: UISearchBar! { didSet { searchBar.returnKeyType = .done searchBar.enablesReturnKeyAutomatically = false } }

Cambia la búsqueda a Hecho. Habilita Listo sin tener que escribir nada en el campo de búsqueda. Después de eso -> searchBar.resignFirstResponder () así:

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { searchBar.resignFirstResponder() }


Una forma simple y complicada es simplemente poner un espacio en blanco al comenzar la búsqueda de edición

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ //Add a blank character to hack search button enable searchBar.text = @" ";}