首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击提示通知后未调用ViewWillAppear

单击提示通知后未调用ViewWillAppear
EN

Stack Overflow用户
提问于 2016-12-05 06:43:36
回答 2查看 372关注 0票数 0

我是iOS App的新手。我使用的是默认表索引为2的选项卡。我的问题是:当按下通知(处于app的背景状态)单击通知后,我的应用程序打开选项卡2并显示一个警报视图。单击“警报视图”按钮后,我想将selectedTab更改为3。我在appDelegate中用appDelegate编写代码:clickedButtonAtIndex:,一切正常。

代码语言:javascript
复制
    UIStoryboard* sb = [UIStoryboard storyboardWithName:@"story_iphone" bundle:nil];
    TabBarController * tb = [sb instantiateViewControllerWithIdentifier:@"TabBarController"];
    [[tb.viewControllers  firstObject] viewWillAppear:YES];
    [tb viewWillAppear:YES];
    [tb setSelectedIndex:3];
    self.window.rootViewController = tb;

但我面临以下问题:

1)不调用VC的ViewWillAppear (例如vc1)。

(2)将vc2从vc1推送后,不调用viewWillAppear of VC2。

3)返回到VC1,ViewDidDisappear,ViewWillDisappear of VC2不被调用。

我找了很多东西,却找不到缺少的地方。请帮帮我。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-05 08:28:16

假设UINavigationController是应用程序的rootViewController,并且您正在将TabBarController推到它的导航堆栈,这应该可以正常工作。

编辑

从您的注释中可以清楚地看到,您的导航堆栈中的选项卡条控制器位于位置1,而不是0 :),因此现在在索引1处查找viewController。

代码语言:javascript
复制
(self.window?.rootViewController as! UINavigationController).viewControllers[1] as! UITabBarController).selectedIndex = your_index_value

建议:

虽然上述解决方案的优点是,制表符控制器位于索引1,但是如果您决定修改导航堆栈本身,选项卡条控制器在导航堆栈中的位置可能会在某一点上发生变化。

与其硬编码索引值,您可以做的是,在应用程序委托中有一个名为tab bar控制器的变量并将其公开:)现在,一旦您在将选项卡条控制器推送到导航堆栈之前创建了一个选项卡栏控制器,现在保存对它的引用:)

由于app委托是单例的,所有viewControllers都可以访问它的公共属性,所以现在可以使用app delegate.tabBarController :)直接访问它。)

现在,谁在乎它在哪里导航堆栈:)现在您有了对选项卡栏的引用,愉快地使用它:)快乐编码:)

票数 0
EN

Stack Overflow用户

发布于 2016-12-05 07:23:36

您不应该直接调用viewWillAppear,也不应该重新加载选项卡条控制器,因为您已经选择了选项卡编号2来加载它。

你所需要做的就是

代码语言:javascript
复制
[((UITabBarController*)self.window.rootViewController) setSelectedIndex:3];

在警报处理程序中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40968506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档