【问题标题】:How to call viewWillDisappear method in Tabbar Application having navigations also如何在具有导航的 Tabbar 应用程序中调用 viewWillDisappear 方法
【发布时间】:2011-11-05 20:04:24
【问题描述】:

我在我的应用程序中创建了 5 个选项卡。在 Tab1 我有UITableView。在didSelectRowAtIndexPath 上,我正在导航到另一个 UIView,其中显示了我所有的 5 个选项卡。而且我还在那个导航视图中播放歌曲。

现在,当我在导航中单击 Back 按钮并再次转到原来的视图时,我可以拨打viewWillDisappear(如预期和正常情况)。

但是当我直接单击另一个选项卡时,导航视图中不会调用 viewWillDisappear。为什么会这样??

我刚刚想到,当我直接单击另一个选项卡时,Tab1 中的视图将调用 viewWillDisappear。但导航视图不会调用该方法。

那么可能的解决方案是什么?请给一些提示...

【问题讨论】:

  • 您是否以编程方式添加了标签栏?
  • 不,它只在设计时拍摄

标签: iphone objective-c uinavigationcontroller uitabbarcontroller uitabbar


【解决方案1】:

我通过调用 viewWillDisappear 来工作

self.definesPresentationContext = true

在 viewDidLoad() 中

否则,不会调用 viewWillDisappear。这就是我所拥有的:

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    self.searchController.active = false
    tableView.reloadData()
}

希望这会有所帮助。

【讨论】:

  • +1 用于使用definesPresentationContext,绝对是比在 TabBarController 上捕获事件更好的方法
【解决方案2】:

我认为您需要在选项卡之间切换时捕获事件。当您从 Tab1 切换到 Tab2 时,正如您所料,viewWillDisappear of Tab1 将不会被调用。相反,将调用 Tab2viewWillAppear

如果您想在切换选项卡时捕捉事件,请检查this link

【讨论】:

    【解决方案3】:

    那是因为你已经创建了 tabBarController 并且你将它作为一个 viewController 从 mainView 推送。

    所以整个 TabBarController 被视为一个 viewController。

    希望这对您有所帮助。

    【讨论】:

    • 但是我怎样才能将我的标签栏中的导航视图称为标签栏控制器视图...???
    • 您正在开发哪个应用程序?这需要你这种类型的结构?
    • 我有音乐应用程序,在 Tab1 上我有表格,为了选择音乐,我通过导航导航到播放器,其他选项卡用于照片、收藏夹等...
    • @DShah:但是为什么不能在第一个选项卡中保留表格视图,而在同一个 tabBarController 的其他选项卡中保留所有其他功能?
    • 对不起,但我认为你没有得到我的问题。我的主要问题是我无法获得导航视图(不是选项卡栏的一部分)的引用,而是从 Tab1 或任何其他选项卡导航。任何选项卡都保持不变。
    【解决方案4】:

    如果你想调用这个方法创建nsnotification中心对象viewWillDisappear 当你想调用这个方法时发布这个通知。

    【讨论】:

      【解决方案5】:

      这就是我让它工作的方式。

      // UITabBarControllerDelegate
          func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
      
              print("Selected view controller")
      
              // do stuff...
              self.navigationController?.setNavigationBarHidden(false, animated: false)
      
              return true
          }
      

      【讨论】:

        猜你喜欢
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多