iphone - restaurar - ¿Cómo paso los datos de un controlador de la barra de pestañas a una de sus pestañas?
pestañas safari iphone (6)
Con Swift :
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let testController = navController.childViewControllers.first as? MyViewController{
testController.data = data
self.tabBarController?.selectedIndex = 1
}
}
Tengo un UITabBarController configurado en el guión gráfico. Quiero pasar un diccionario de datos desde el controlador de la barra de pestañas para usarlos en la pestaña secundaria apropiada, que es un UIViewController estándar.
Esto parece una pregunta larga para responder, pero realmente no sé por dónde empezar. Estoy buscando la forma más fácil a través de esto. ¿Debo hacer que las pestañas funcionen programáticamente? También me agradecería que me indicara cualquier documentación útil para desarrolladores.
-Austin
ps soy nuevo y hasta ahora he dependido del guión gráfico para las transiciones del controlador de vista
Si tiene un UINavigationController
como uno de sus controladores de vista UITabBarController
, puede hacer lo siguiente:
NSArray *viewControllers = [self.tabBarController viewControllers];
UINavigationController *myNavController = (UINavigationController *)viewControllers[2];
MyViewController *myController = [[myNavController childViewControllers] firstObject];
// Remember to alloc/init objects first if the objects haven''t been initialized already.
[myController.whateverArray = [[NSArray alloc] initWithArray:@[@"Example1", @"Example2"]];
[self.tabBarController setSelectedIndex:2];
Tengo este trabajo ...
Tengo 3 controladores de vista, tengo que pasar la matriz de uno a otro ..
Aquí esta lo que hice
Anexando los datos a uno de Tab View Controller
NSArray *viewControllers = [self.tabBarController viewControllers];
ListViewController *listView = (ListViewController *)viewControllers[1];
listView.myArray = self.myArray;
[self.tabBarController setSelectedIndex:1];
Y después de eso, carga el controlador de vista, eso es todo.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ListViewController *listView = (ListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"IDListView"];
Tomó un par de días, pero descubrí una solución simple. En el método viewDidLoad de mi TabBarController, puedo acceder y establecer los atributos de mis subvistas con pestañas usando
[[self viewControllers] objectAtIndex:0]
o cualquier índice al que desee acceder.
Guardar eso como una instancia de mi tab1_viewController me da un puntero al objeto, desde el cual puedo obtener y establecer los valores de mis propiedades. Esto inicialmente no estaba claro porque el guión gráfico creó los objetos tab_viewController para mí. ¡Nunca tuve la oportunidad de inicializarlos como quería!
Tu mejor apuesta es utilizar notificaciones.
En tu barra de pestañas, harías esto:
NSDictionary *myDictionary; // Populate this with your data.
// Fire the notification along with your NSDictionary object.
[[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name"
object:myDictionary];
Luego, en la pestaña secundaria ViewController, debería "escuchar" esa notificación.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:@"Some_Notification_Name"
object:nil];
- (void)handleNotification:(id)object {
// Use your NSDictionary object here.
}
Utilizando Swift
Si tiene UINavigationController
como una de las pestañas en UITabBarController
, desea obtener la instancia del controlador de vista secundaria en lugar de crear una nueva instancia y enviarla al controlador de vista de navegación antes de cambiar el índice de vista de pestaña. Puedes hacerlo...
Este código de ejemplo asume que el controlador de navegación está en la primera pestaña (índice 0) y que "childViewController" está incrustado en el controlador de navegación.
let viewControllers = self.tabBarController?.viewControllers
let navController = viewControllers![0] as! UINavigationController
let profileViewController = self.storyboard?.instantiateViewControllerWithIdentifier("childViewController") as? ProfileViewController
profileViewController!.parameter1 = "Value1"
profileViewController!.parameter2 = "Value2"
navController.pushViewController(profileViewController!, animated: true)
self.tabBarController?.selectedIndex = 0