【问题标题】:presentViewController over TabBarController causes "attempt to present *VC on TabBarVC whose view is not in the window hierarchy"presentViewController over TabBarController 导致“尝试在其视图不在窗口层次结构中的 TabBarVC 上呈现 *VC”
【发布时间】:2014-04-15 19:15:15
【问题描述】:

我的根视图控制器是加载在委托中的选项卡栏控制器。每个选项卡都是一个表格视图控制器。首次加载应用程序时,我希望通过 presentViewController 弹出一个登录屏幕,我在 Tab Bar Controller 的 viewDidLoad 方法中有该登录屏幕。它导致了我读过的窗口层次结构错误——尽管没有一个解决方案对我有用。我尝试在第一个选项卡的 viewDidLoad 方法中显示模态视图,但这导致了同样的错误。

在 viewDidLoad 中的标签栏视图控制器中,我的代码是:

 CLLoginViewController *loginVC = [[CLLoginViewController alloc] init];
    loginVC.delegate = self;
    [self.view addSubview:loginVC.view];
    [self presentViewController:loginVC animated:NO completion:nil];

【问题讨论】:

    标签: presentmodalviewcontroller presentviewcontroller


    【解决方案1】:

    你的问题很模糊,但我理解的是,你想在加载 tabController 之前显示一个登录屏幕。

    所以更好的方法是,在你的 AppDelegate 中设置窗口的 rootViewController 时,做这样的事情

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"showTabBar"]){
         self.window.rootViewController  = tabBarControllerObject;   //TabBarView is loaded
         [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"showTabBar"];
    }
    else{
         self.window.rootViewController  =   tabBarControllerObject;   //Login Screen is loaded for first time.
    }
    

    希望对你有帮助

    【讨论】:

    • 感谢回复,我试试看。只是为了提供更多信息:我的应用程序的整体结构是 - 1. App Delegate 2. Tab Bar View Controller 3. 每个 Tab Bar 都是一个 TableView 控制器。当我插入 UINavigation Controller 作为根视图控制器(1. App Delegate 2.UINaviationController 3. UITabViewController 4. TableViewControllers)时,似乎在标签栏控制器中我可以呈现ViewController:loginVC 没有任何问题。我很困惑为什么会这样。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2015-09-17
    • 2023-03-31
    相关资源
    最近更新 更多