【问题标题】:Correct way setting 'Root ViewController' thru 'UINavigationController' subclass通过“UINavigationController”子类设置“Root ViewController”的正确方法
【发布时间】:2017-07-14 14:17:08
【问题描述】:

我正在尝试动态地,使用代码通过他的子类更改我的UINavigationControllerRoot

基本上,我的 Storyboard 看起来像这样:

#MARK : 应用故事板

如您所见,我将CustomNavigationController 设置为Initial View Controller 选项(通过Storyboard)。

我如何通过CustomNavigationController 类设置运行应用程序时将显示的根ViewController

#MARK : 'CustomNavigationController' 类

class CustomNavigationController: UINavigationController {

  // What method should i use?

}

【问题讨论】:

    标签: ios swift uinavigationcontroller rootviewcontroller


    【解决方案1】:

    必须为右侧的两个视图控制器指定故事板标识符(在身份检查器选项卡上)。

    然后在您的自定义 NavVC 中,在根目录构建您想要的视图控制器,并通过使其成为导航堆栈中唯一的视图控制器(这是一个数组)使其成为根...

    - (void)viewWillAppear:animated {
        [super viewWillAppear:animated];
        UIStoryboard *storyboard = [self storyboard];
        UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"one of the ids you set up"];
        self.viewControllers = @[ vc ];
    }
    

    很快(很确定)...

    override func viewWillAppear() {
        super.viewWillAppear()
        let storyboard = self.storyboard
        let vc = storyboard.instantiateViewController(withIdentifier: "one of the ids you set up")
        self.viewControllers = [ vc ] 
    }
    

    【讨论】:

    • ViewWillAppear 将被召回如果我将出席而不是解雇一个 vc。有没有更好的函数来调用这个 sn-p?
    • viewWillAppear 将在 在导航 vc 上被调用,仅当您呈现它时(而不是其堆栈上的 vcs)。你是这个意思吗?你能指定你不想这样做的条件吗?如果是这样,我们可以在 viewWillAppear 中表达这些条件
    • 嗨 Danh,感谢您的回复。你能详细说明为什么 viewWillAppear 是运行这个 sn-p 的最佳位置吗?是因为您在等待“LayoutSubviews”启动吗?基本上,我将“权限屏幕 VC”和“应用程序流 VC”划分为两个不同的 ViewController。所以在加载时,我正在检查用户是否授予我权限。据此,我正在决定是否将他发送到“权限 VC”或“正常应用程序流 VC”。
    • @RoiMulia,我将 viewWillAppear 视为在视图出现之前运行的便捷钩子。 didLayout 也可以,但我认为您的意图描述性较差。可能是我理解错了,不过你不会直接用用户权限条件来选择vc标识吧? NSString *identifier = (/*user granted permission*/)? @"identifierA" : @"identifierB";
    • 是的,但调用'instantiateViewController'时不必指定VC类吗?
    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2018-09-29
    相关资源
    最近更新 更多