Tengo un proyecto de xCode que contiene un formato tableview con una «Barra de Búsqueda y la Búsqueda de Controlador de Pantalla» para permitir al usuario refinar la lista de elementos que aparecen en pantalla. En general, la orientación proporcionada en la http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view fue seguido. Recientemente he descargado la última versión de xCode (Versión 5.0 (5A1413)) con iOS 7 y apoyo han sido las pruebas de la aplicación en cuestión en diferentes objetivos.

Cuando se ejecuta esta aplicación en iOS 6 destino (emulador o dispositivo real), que funciona como se espera lo que significa que presionar el botón cancelar, se quita la barra de búsqueda y pulsar el botón borrar (poco gris x) borra todos los criterios de búsqueda ya escrito por el usuario. Pero cuando el proyecto se ejecuta en iOS 7 como objetivo tanto la clara y el botón cancelar no funcionan.

La searchBarCancelButtonClicked método está implementado en este proyecto, y he comprobado que no es llamado cuando el objetivo está ejecutando iOS 7.

- (void)searchBarCancelButtonClicked:(UISearchBar *)SearchBar
{
    NSLog(@"searchBarCancelButtonClicked called");

    self.searchBar.text = nil;

    

    //Hide Search bar when cancelled
    [self hideSeachBar];

    [self.searchBar resignFirstResponder];

    
    }

Mi vista de tabla controlador está configurado para ser el UISearchDisplayDelegate y UISearchBarDelegate. Y parece que esto sigue trabajando como barra de búsquedas:textDidChange: se llama en un iOS 6 o 7 de destino.

@interface ItemViewController () <UISearchDisplayDelegate, UISearchBarDelegate>

@end

No puedo ver los otros posts relacionados con este o cualquier iOS 7 material de cambio (como https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid/TP40013174-CH8-SW1) que menciona alguna de recodificación que necesita ser hecho para apoyar a iOS7.

Alguna idea sobre esto? Gracias

No he tenido la oportunidad de revisar las respuestas, pero también me di cuenta de estos mensajes por el mismo problema: devforums.apple.com/message/880210#880210 y devforums.apple.com/message/876407#876407.
Que el código de trabajo para mí, para iOS7: stackoverflow.com/a/22287788/771689

OriginalEl autor Mike | 2013-10-03

6 Comentarios

  1. 3

    Tengo el mismo problema, he probado con el código siguiente. Por favor, probar este.

    -(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
    {
        controller.active = YES;
    
        [self.view addSubview:controller.searchBar];
        [self.view bringSubviewToFront:controller.searchBar];
    }
    
    - (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView  {
    
        tableView.frame = self.archiveListTblView.frame;
    }
    
    - (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
    {
        controller.active=NO;
    
        [self.view addSubview:controller.searchBar];
    }
    Curioso cómo su auto.archiveListTblView es establecer y utilizar.
    Hola Mike, En mi punto de vista : iOS7 es automáticamente hace que el diseño de su natividad de windows. Esa es la razón para el problema que nos hemos enfrentado. Y una cosa más, he probado con «auto.vista.marco» en lugar de «auto.archiveListTblView.marco». Incluso este código también funciona bien para mí. Así, el problema fue que no establece el marco para el formato tableview. 😛

    OriginalEl autor

  2. 1

    botón Cancelar y el botón de Borrar no funciona si se toca el botón de Búsqueda en la navegación. Si pulsa sobre la barra de Búsqueda a la estrella de la búsqueda, que funciona normalmente
    => Que significa que si la barra de búsqueda no es visible en la pantalla antes de mirar de búsqueda, a continuación, los botones parecer deshabilitar demasiado.

    Así que, he encontrado una solución, pero no es totalmente perfecto.
    Antes de hacer la barra de búsqueda de convertirse en la primera respuesta, tiene que desplazar la vista de tabla para arriba. Prueba este código.

    -(IBAction)goToSearch:(id)sender {
         //Make search bar visible on screen before make it response
        [_tableView setContentOffset:CGPointMake(0, 0) animated:NO];
    
        //Make search bar active
        [candySearchBar becomeFirstResponder];
    }

    El único problema se produce si hace esto, es su tabla de la vista de desplazarse a la parte superior, lo que significa que al cancelar la búsqueda, usted pierde celda actual índice de antes.

    OriginalEl autor

  3. 1

    Este problema parece venir de la nueva comportamiento de la translúcido de la propiedad en una barra de navegación.

    Desde iOS 7 barras de navegación son translúcidos de forma predeterminada. Y parece que es la superposición de la barra de búsqueda cuando se visualiza después de pulsar un botón. Si se desplaza a la parte superior de tu listView y utilizar la barra de búsqueda, debe estar funcionando correctamente.

    Intenta establecer en el controlador:

    float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (osVersion >= 7.0)
    {
        self.navigationController.navigationBar.translucent = NO;
    }

    Esto debería solucionar rápidamente el problema.

    Pero creo que para una mejor revisión debería ver la iOS 7 guía de transición donde explican cómo manejar translúcido barras de navegación.

    Espero que ayude.

    OriginalEl autor

  4. 1

    He tenido este problema también. Extrañamente otros métodos de delegado de UISearchBarDelegate están siendo llamados. Una solución podría ser:

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
        if ([searchText length] == 0) {
            NSLog("No Text");
        }
    }

    Que trabajó para mí

    OriginalEl autor

  5. 0

    Busqué en google por todo internet y no pude encontrar una solución. así que he cambiado el UItableview comportamiento.

    lugar de [searchBar becomeFirstResponder]; me desplácese hacia abajo en el formato tableview.

    - (IBAction)goToSearch:(id)sender {
    
     scroll down to show the table.
    //   CGRect newBounds = self.TableView.bounds;
    //   newBounds.origin.y =0;
    //   
    //   self.TableView.bounds = newBounds;
    //[searchBar becomeFirstResponder];
    
        CGPoint contentOffset=self.TableView.contentOffset;
        contentOffset.y=0;
        [self.TableView setContentOffset:contentOffset animated:YES];
    
    
    }

    en mi ViewDidload:

    //       CGRect newBounds = self.TableView.bounds;
    //       newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height;
            //self.TableView.bounds = newBounds;
    
            CGPoint contentOffset=self.TableView.contentOffset;
            contentOffset.y=self.TableView.bounds.origin.y + searchBar.bounds.size.height;
            self.TableView.contentOffset=contentOffset;

    Si se encuentra por algunas razones, en iOS 7 , cambiar la vista de la tabla de límites causa barra de búsqueda a desaparecer.
    Espero que ayude.

    OriginalEl autor

  6. 0

    En mi caso, yo había recolocado la barra de búsquedas a la parte superior de la pantalla, y no fue invisible vista que se superpone sobre la barra de búsquedas.

    Por lo tanto botón cancelar no fue tocado realmente.

    Así, he traído el seachbar frente cuando [searchBarTextDidBeginEditing] método fue llamado como el de abajo.

    -(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
        lc_SearchBarYPos.constant = 20.0f; //this is code to reposition the searchbar
        [self.view bringSubviewToFront:searchBar];
    }

    La esperanza de que esto puede ayudar.

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here