【问题标题】:Changing to a Tabbar tab view programmatically in viewDidAppear在 viewDidAppear 中以编程方式更改为 Tabbar 选项卡视图
【发布时间】:2018-11-20 11:39:36
【问题描述】:

我有一个带有 5 个视图控制器的标签栏。在我的第三个视图控制器中,我有一个表格视图及其 didSelect 方法,我正在使用以下代码以编程方式将 TabBar 选项卡更改为第一个选项卡。 tabBarController?.selectedViewController = tabBarController.childViewControllers[0] 在我的第一个视图控制器 childViewControllers[0] 中,有 viewDidAppear 方法,包括我的 ActivityIndi​​cator 和一些 API 调用。当我使用上面的代码以编程方式更改我的标签栏时,第三个视图控制器停留在屏幕上,并且一旦 viewDidAppear 方法完成,它就会切换,这会给用户带来冻结感。但是,当我直接按下第一个视图控制器时,第一个视图控制器出现,然后显示活动指示器进行 API 调用。可能是什么原因,我该如何解决?

【问题讨论】:

  • 为 API 调用添加一些小延迟,这将解决冻结问题
  • 您能告诉我们,您是如何更改视图控制器的吗?
  • 冻结问题与 API 调用无关。正如我所说,当我从标签栏按下第一个标签栏时,它正在显示我的活动指示器并进行 API 调用。问题是当我在 didSelectRowAt 函数中以编程方式切换标签栏时,它正在等待完成 API 调用。 @Vinodh
  • 能否评论API调用并尝试切换标签栏。如果 UI 未冻结,则 UI 切换和 API 调用在导致冻结的同一线程上工作。所以切换标签时延迟
  • 你可以使用这个方法来增加调用stackoverflow.com/a/28821805/1142743的延迟。当在侦听器中调用 didselect 时将通知从第三个 viewcontroller 发布到 firstview 添加延迟的 API 调用

标签: ios swift uitableview uitabbarcontroller


【解决方案1】:

你可以试试这个

tabBarController.selectedIndex = 0

【讨论】:

    【解决方案2】:

    当我更改我的tabBarController?.selectedViewController = tabBarController.childViewControllers[0] 代码时

    DispatchQueue.main.async {
    tabBarController?.selectedViewController = tabBarController.childViewControllers[0]
    }
    

    它运行良好,第一个视图控制器中的一些 API 调用导致冻结,所以我将它放在主线程中,感谢@Vinodh

    【讨论】:

    • 太棒了,节省了我的时间!!
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2015-06-01
    相关资源
    最近更新 更多