2013-02-07 142 views
0

对不起,如果这看起来像一个简单的问题,但每次我搜索谷歌这个主题,我所能找到的是如何将数据从子视图传递到父视图,反之亦然。通过uinavigationcontroller将变量从父视图传递给子视图

基本上,我提出了一个模态视图,它在它自己的UINavigation控制器中。模式视图需要知道是否允许用户'编辑' - 所以我认为最简单的方法是将子视图(isEdit)上的BOOL设置为TRUE(这会得到因为这个模态视图是从UINavigation控制器提供的 - 我无法从 - (void)prepareForSegue函数访问它,并直接设置BOOL。我已经尝试了UINav控制器的子类化,并在其中包含一个可以设置的BOOL,然后在子视图中进行检查,但我似乎无法从子视图访问控制器 - 我将包含我的代码,但我确定必须有一个更简单的方法来完成这项任务!

是否有人能够建议一个更经济的方式将此布尔值通过UINavigationController传递给子视图?

感谢

回答

5

如果您赛格瑞调用一个导航控制器,你可以从根视图控制器上设置属性,像这样

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"MySegueId"]) { 
     UINavigationController *navController = (UINavigationController *)segue.destinationViewController; 
     MyViewController *childController = (MyViewController *)navController.childViewControllers.lastObject; 
     childController.isEditable = YES; 
    } 
} 
+0

这是如果你使用故事板,或者你正在以编程方式调用segue。如果没有,你可以在初始化子视图控制器时设置属性,按照Joel的建议。 – followben

0

当你分配/初始化刚才设置的属性,然后模态视图控制器(说你的模式视图控制器被称为ProfileVC):

ProfileVC *vc = [[ProfileVC alloc] init]; 
vc.isEdit = YES; 
[vc.navigationController presentModalViewController:vc animated:YES]; 

只要确保你的ProfileVC.h你有一个叫isEdit属性:

@interface ProfileVC : UIViewController 
@property (nonatomic) BOOL isEdit; 
@end 
+0

OP表示导航控制器本身是模态的。也就是说,这样做,你可以在使用'-initWithRootViewController:'来初始化navController和childVC之前设置属性。 – followben