【问题标题】:Attempt to present a viewcontroller whose view is not in the window hierarchy尝试呈现视图不在窗口层次结构中的视图控制器
【发布时间】:2013-12-02 21:42:32
【问题描述】:

我有一个标签栏应用程序。我的要求是我选择“扫描”选项卡来扫描二维码并立即导航/跳转到另一个“列表”选项卡。 'scan' 和 'list' 选项卡都在 didFinishLaunchingWithOptions 的 viewControllers 数组中。在引用 this 链接之后,我认为我不需要设置委托,因为这两个选项卡都已经存在于层次结构中。

我在以下行中收到此警告

    if(x)
    {
    listViewCntrl = [[ListViewController alloc] initWithNibName:@"ListViewController" bundle:nil];
    listViewCntrl.getFlag = YES;
    [self presentViewController:listViewCntrl animated:YES completion:Nil]; // I get the warning here
    }

如果我注释掉上面的代码并添加

[self.tabBarController setSelectedIndex:1];

然后我将无法获取列表视图控制器的子视图(设置标志以显示子视图),我需要在扫描后显示在列表选项卡中。

如果我添加应用程序会崩溃

[self.tabBarController setSelectedViewController:listViewCntrl];

那么如何在扫描后显示listView的子视图呢?

【问题讨论】:

    标签: ios objective-c uitabbarcontroller


    【解决方案1】:

    如果你使用故事板,你可以试试这个:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController * destViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerIdentifier"];
    [self.navigationController pushViewController:destViewController animated:YES];
    

    您必须在情节提要中为控制器设置标识符。

    【讨论】:

    • 我没有在我的项目中使用故事板。此外,如果我使用 [self.navigationController ...],它将在同一个选项卡中导航。我还需要更改标签索引。这是我的要求。
    【解决方案2】:
    ListViewController *listController = (ListViewController*)[self.tabController viewControllers][1];
    listController.getFlag = 1;
    [self.tabBarController setSelectedIndex:1];
    

    问题是您正在创建一个全新的ListViewController。你说你已经在标签控制器中有一个 - 你不需要一个新的。

    您不能使用第三个选项,因为这两个 ListViewController 是不同的对象(它们可能属于同一类,但它们指向不同的地址)。

    【讨论】:

    • 我得到这个错误标志 [UINavigationController setGetFlag:]: unrecognized selector sent to instance 如果我注释掉标志行,它不会导航到 index:1
    • @OptimusPrime 是的,当然,所以你有一个 UINavigationController 用于那个特定的选项卡,那么我猜 ListViewController 在导航堆栈中的某个地方。我对您的应用程序几乎一无所知,因此我无法在这里给您一个明确的答案,但请尝试 UINavigationController 上的 viewControllerstopViewController 属性。
    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多