objective c - UINavigationControllers: ¿Cómo pasar el valor al controlador superior(padre?) En la pila?
objective-c delegation (2)
Tengo SendingController que empuja a nav stack SendingDeatilsController (que tiene TableView). El usuario debería elegir en TableView una fila (marcada con la marca de verificación) y me gustaría pasar el valor de esta fila (que sea un objeto NSString) al SendingController.
¿Cómo puedo realizar este comportamiento en mi aplicación? Y es SendingController principal para SendingDetailController (atributo parentController de SDC se refiere a SC) ??
Para una comunicación asíncrona fácil entre diferentes UIViewControllers, es recomendable que consulte NSNotification y NSNotificationCenter .
Hay muchos tutoriales en la web y algunas buenas respuestas aquí en SO que pueden mostrarle cómo hacer eso exactamente.
Si desea implementar este comportamiento, pase al SendingDetailController
una referencia al controlador de vista anterior. De esta forma, el controlador de vista detallada puede enviar un mensaje al anterior en la pila.
En su SendingDetailController
defina una referencia débil:
// in .h
SendingController *sendingController;
@property(assign) SendingController *sendingController;
// in .m
@synthesize sendingController;
-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// retrieve the string and send the message
[sendingController didSelectString:theString];
}
Ahora, antes de presionar el SendingDetailController
en la pila, no olvide configurar su propiedad sendingController
.
// .m
// where you push the vc
if(!sendingDetailController) {
sendingDetailController = [[SendingDetailController alloc]
initWithNibName:@"TheNIBName"
bundle:nil];
sendingDetailController.sendingController = self;
}
[self.navigationController pushViewController:sendingDetailController
animated:YES];
y escribe el método que recibirá la cadena.
-(void)didSelectString:(NSString *)aString {
// do anything with string
[self.navigationController popViewControllerAnimated:YES];
}
Esto debería hacer el trabajo.