通过NavigationController堆栈更改打开的ViewController的属性

时间:2012-08-15 17:10:12

标签: iphone ios ios5 poptoviewcontroller

想知道我如何设置已经在NavigationController堆栈上的视图控制器的属性

我的情况:

我想像这样设置图片上传流程

(导航堆栈) RootViewController - > TakePictureViewController - > EditPictureViewController - > UploadPictureViewController

当用户从UploadPictureViewController确认上传,而不是开始上传时,我想在RootViewController上设置一个包含上传查询的NSDictionary属性,然后将导航堆栈弹回到RootViewController并让它处理启动和状态报告查询。

这是我在uploadpictureviewcontroller中的代码,目前代码确实弹出到右视图控制器,但是uploadPackage属性仍为零,我也试过-setUploadPackage

RootViewController *rvc = (RootViewController *)[self.navigationController.viewControllers objectAtIndex:0];

rvc.uploadPackage = uploadPackage;

[self.navigationController popToViewController:rvc animated:YES]; 

所有帮助表示感谢,谢谢。

1 个答案:

答案 0 :(得分:2)

尝试使用[self.navigationController popToRootViewControllerAnimated:YES]。应该这样做。

修改

如果您只有一个RootViewController实例,那么您可以将其设置为单例,因此您可以从任何其他控制器访问它(就像appDelegate一样)。为此,您需要将以下内容添加到RootViewController.m下的synthesize...;

static RootViewController *rootViewController;

+(id)sharedRootController {
    return rootViewController;
}

init RootViewController方法中添加以下行:

rootViewController = self;

现在回到你的UploadPictureViewController你可以像这样设置uploadPackage:

RootViewController *rvc = [RootViewController sharedRootController];
rvc.uploadPackage = uploadPackage;

请注意,如果要有多个RootViewController实例,则不应使用单例方法。

希望这有帮助!