我有SendingController,它推送到导航堆栈SendingDeatilsController(其中一个有TableView)。用户应该在TableView中选择一行(它由Checkmark检查),我想将此行的值(让它将NSString对象)传递给SendingController。
如何在我的应用程序中实现此行为?并且是SendingDetailController的SendingController父级(SDC的属性parentController是指SC)?
答案 0 :(得分:1)
如果要实现此行为,请将SendingDetailController
引用传递给上一个视图控制器。这样,详细视图控制器可以将消息发送到堆栈上的前一个消息。
在SendingDetailController
中定义弱引用:
// 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];
}
现在,在推送堆栈上的SendingDetailController
之前,不要忘记设置其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];
并编写将收到字符串的方法。
-(void)didSelectString:(NSString *)aString {
// do anything with string
[self.navigationController popViewControllerAnimated:YES];
}
这应该可以胜任。
答案 1 :(得分:0)
为了便于在不同的UIViewControllers之间进行异步通信,您可能需要查看NSNotification和NSNotificationCenter。
网上有很多教程,这里有一些很好的答案,可以告诉你如何做到这一点。