objective-c uinavigationcontroller delegation

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.