【问题标题】:Pass variable from parent view to child view through uinavigationcontroller通过 uinavigationcontroller 将变量从父视图传递到子视图
【发布时间】:2013-02-07 01:26:06
【问题描述】:

很抱歉,这似乎是一个简单的问题,但每次我在谷歌上搜索这个主题时,我只能找到如何将数据从子视图传递到父视图,反之亦然。

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

有没有人能提出一种更经济的方式将这个布尔值“通过”UINavigationController 传递给子视图?

谢谢

【问题讨论】:

    标签: ios xcode modalviewcontroller


    【解决方案1】:

    如果你的 segue 调用导航控制器,你可以从 -prepareForSegue 设置根视图控制器的属性,像这样

    - (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;
        }
    }
    

    【讨论】:

    • 如果您正在使用情节提要,或者您正在以编程方式调用 segue。如果没有,您可以按照 Joel 的建议在初始化子视图控制器时设置该属性。
    【解决方案2】:

    当您分配/初始化模态视图控制器时,只需设置属性(假设您的模态视图控制器称为 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
    

    【讨论】:

    • OP 说导航控制器本身是模态的。也就是说,这样做,您将在使用 childVC 使用 –initWithRootViewController: 初始化 navController 之前设置属性。
    猜你喜欢
    • 2021-09-26
    • 2015-11-12
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多