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 = @" ";}