Ocultar UISearchBar de UISearchDisplayController

Tengo una aplicación basada en UInavigationcontroller y UInavigationcontroller para cada pestaña. En un TabViewController , he implementado un UIsegmentedcontrol , searchDisplayController y uitableview. Los elementos de navigation, tabledata se modifican en function de la selección de control segmentado. Y para un segmento he ocultado la barra de búsqueda. Pero cuando la barra de búsqueda está oculta, la primera fila de la didselectrowatindexpath de didselectrowatindexpath no responde a didselectrowatindexpath .

Aquí está mi código,

En la acción de cambio de segmento

 - (void)indexDidChangeForSegmentedControl:(UISegmentedControl *)aSegmentedControl { [self changeNavigationItems]; l.text = [NSString stringWithFormat:@"%d",self.segmentControl.selectedSegmentIndex]; if([segmentIndexesToHideSearchBar containsObject: [NSString stringWithFormat:@"%d", self.segmentControl.selectedSegmentIndex]]) { self.searchDisplayController.searchBar.hidden = YES; self.dataTable.frame = CGRectMake(0, 0, self.dataTable.frame.size.width, self.dataTable.frame.size.height); } else { self.searchDisplayController.searchBar.hidden = NO; self.dataTable.frame = CGRectMake(0, 44, self.dataTable.frame.size.width, self.dataTable.frame.size.height); } [self.dataTable reloadData]; 

}

Otros códigos son generics y otras cosas funcionan correctamente.

El segundo problema es cuando vuelvo de una vista de detalles haciendo clic en una fila, el cambio de marco de la tabla no se mantiene. Hay un espacio donde estaba la barra de búsqueda.

Esperando ayuda

Creo que este no es el enfoque correcto, pero me funciona 🙂 para hacerlo oculto:

 CGRect searchFrame = self.searchDisplayController.searchBar.frame; searchFrame.size.height = 0; self.searchDisplayController.searchBar.frame = searchFrame; self.searchDisplayController.searchBar.hidden = YES; 

Para "revelarlo" de nuevo:

 searchFrame.size.height = 44; self.searchDisplayController.searchBar.frame = searchFrame; self.searchDisplayController.searchBar.hidden = NO; 

No estoy seguro de si esto funciona con autolayout, nunca lo probé. (También está en Xcode <5, iOS <7)

Lo he descubierto. Mi primer problema fue el primer clic en la fila de tableview que no respondió. Eso fue porque he confundido didSelectRowAtIndexPath para didDeselectRowAtIndexPath . Qué error tan tonto y que sufrí durante horas … 🙁

El segundo problema fue que estaba escribiendo el código de ocultación y cambio de marco en la function viewDidLoad , moví el código para viewDidAppear function viewDidAppear . Ahora los códigos funcionan correctamente.