代码之家  ›  专栏  ›  技术社区  ›  Losiowaty

在导航控制器中添加一次常用视图

  •  2
  • Losiowaty  · 技术社区  · 10 年前

    我试图实现的是在界面构建器中设计我的“共享”UI部分,并使用子视图控制器向用户显示内容。这听起来可能是在试图重塑 UINavigationController ,但事实并非如此。事实上,整件事都嵌入其中。

    看起来是这样的: example view

    现在,我要做的是更改这个的子视图控制器 BaseViewController 并在导航栏中指示此更改,以便保留其所有功能。

    我尝试添加这样的方法:

    + (UIViewController *)baseViewControllerWithChild:(UIViewController *)child {
        BaseViewController *base = [BaseViewController new];
        [base addChildViewController:child];
        child.view.frame = base.childViewControllerContainer.frame;
        [base.view addSubview:child.view];
        [child didMoveToParentViewController:base];
    
        return base;
    }
    

    然后像这样使用它:

    - (void)didTouch:(UIButton *)sender { 
        [self.parentViewController.navigationController pushViewController:[BaseViewController baseViewControllerWithChild:[DummyViewController new]] animated:YES];   
    }
    

    (注: DummyViewController 正是这样-一个虚拟vc,仅用于测试,它只设置了背景色 viewDidLoad )

    此方法是第一个子视图控制器中按钮的处理程序。到现在为止,一直都还不错。不幸的是,结果并不像预期的那样——推送的视图控制器是黑色的。一开始我以为这是因为 BaseView控制器 设计于 storyboard 初始设置为 rootViewController 导航控制器。将其移动到 xib 文件和代码中的设置对我来说不太有效,因为您不能添加 Container View 在一个 西班牙文 .

    总而言之,我希望基础设计由 BaseView控制器 类和内容将作为 childViewController 这是一个很好的例子。按下新的视图控制器将是对这些控件执行操作的结果 子视图控制器 并且应该相应地更新导航堆栈。

    此外,整个系统需要与iOS 7配合使用。

    对于如何实现这一目标,我们非常感谢您的帮助!

    1 回复  |  直到 10 年前
        1
  •  0
  •   Losiowaty    10 年前

    这个问题的起因是 base.childViewControllerContainer 存在 nil -这是因为 view 视图控制器的属性被延迟加载。正在添加 [base view] 进入之前 base.childViewControllerContainer 解决了这个问题,但我不确定这是否是唯一、唯一和最好的解决方法。