Post on 13-Jul-2020
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-13 Depto. Ciencia de la Computación e IA
Plataforma iOS
Sesión 3: Controladores contenedores
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Puntos a tratar• Controlador de navegación• Controlador de barra de pestañas• Controlador de búsqueda
2
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Controlador de navegación• Las pantallas se almacenan en una pila• Tenemos una barra de navegación que incluye• Un título (propiedad title del controlador actual)• Un botón para volver atrás (propiedad title de la anterior pantalla)
3
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Elementos de la navegación• Navigation Controller (UINavigationController)• Gestiona la navegación• No hace falta crear subclases
• Barra de navegación• Barra en la parte superior
• Navigation item• Contenido de la barra de navegación
• Controlador raíz• Pantalla principal de la navegación• Desde ella podemos apilar otras pantallas
4
RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Apilar pantallas• Apilar una pantalla
• Desapilar la última pantalla
5
-‐ (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; NSString *titulo = [NSString stringWithFormat: @"Item %d", indexPath.row]; detailViewController.title = titulo; [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release];}
[self.navigationController popViewControllerAnimated:YES];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Controlador de pestañas• Muestra una barra de pestañas• Cada pestaña muestra un controlador diferente• Se implementa con UITabBarController
6
UITabBarController *tabBarController = [[UITabBarController alloc] init];tabBarController.viewControllers = [NSArray arrayWithObjects: controller1, controller2, controller3, nil];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Propiedades de las pestañas• Título e icono• Se establecen como propiedades del controlador asociado a cada
pestaña
• También pueden establecerse desde el inspector de atributos
7
-‐ (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization self.title = @"Asignaturas"; self.tabBarItem.image = [UIImage imageNamed:@"icono_asig"]; } return self;}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Controlador de búsqueda• Permite realizar búsquedas en una pantalla• Normalmente se utilizan en tablas (UITableViewController)• Filtran los contenidos de la tabla según la cadena de búsqueda
• Necesita• Barra de búsqueda (UISearchBar)• Controlador de contenido (normalmente el de la misma tabla)
Se utilizará para obtener los resultados de la búsqueda
8
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Funcionamiento de la búsqueda• Al pulsar la barra la tabla queda en sombra• Al introducir texto se muestran los resultados de la búsqueda• ¡CUIDADO! La tabla de resultados la crea el controlador• Propiedad self.searchDisplayController.searchResultsTableView
9
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Realizar la búsqueda• Definimos un método de UISearchDisplayDelegate• Filtramos los resultados según la cadena de búsqueda
• Se ejecuta cada vez que modificamos la cadena
• Si la operación es lenta, dejamos una operación en segundo plano y devolvemos NO
10
-‐ (BOOL)searchDisplayController: (UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { self.itemsFiltrados = [self filtrarItems: _items busqueda: searchString]; return YES;}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
Mostrar resultados• Comprobamos si la tabla es la original o la de resultados
11
-‐ (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(tableView == self.searchDisplayController.searchResultsTableView) { return [_itemsFiltrados count]; } else { return [_items count]; }}
-‐ (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Obtener celda del pool ... if(tableView == self.searchDisplayController.searchResultsTableView) { cell.textLabel.text = [_itemsFiltrados objectAtIndex: indexPath.row]; } else { cell.textLabel.text = [_items objectAtIndex: indexPath.row]; } return cell;}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Plataforma iOS © 2012-13 Depto. Ciencia de la Computación e IA Controladores contenedores
¿Preguntas...?
12