UINavigationControllers:如何将值传递给堆栈中的更高(父?)控制器?

时间:2011-07-23 12:06:23

标签: objective-c uinavigationcontroller delegation

我有SendingController,它推送到导航堆栈SendingDeatilsController(其中一个有TableView)。用户应该在TableView中选择一行(它由Checkmark检查),我想将此行的值(让它将NSString对象)传递给SendingController。

如何在我的应用程序中实现此行为?并且是SendingDetailController的SendingController父级(SDC的属性parentController是指SC)?

2 个答案:

答案 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之间进行异步通信,您可能需要查看NSNotificationNSNotificationCenter

网上有很多教程,这里有一些很好的答案,可以告诉你如何做到这一点。