【问题标题】:How to identify which "relationship" is being followed by a UITabBarController?如何识别 UITabBarController 所遵循的“关系”?
【发布时间】:2015-12-18 13:06:45
【问题描述】:

我有这张图所示的情况。

简而言之,我有一个可以以不同方式配置的视图控制器,我希望能够通过 IB 指定这些方式。我认为这两个箭头是 segue,所以我想我会覆盖prepareForSegue:sender:,并根据每个 segue 的 id 配置目标视图控制器。我只需要在初始化时执行一次,所以我认为该方法可行。然而,这两个箭头被证明不是segues——或者至少prepareForSegue:sender:不会为它们开火。

这样的事情真的可以做到吗?最坏的情况,我可以通过编程来完成,没什么大不了的,但我认为故事板很酷,为什么不使用它们呢?

【问题讨论】:

  • prepareForSegue 应该为嵌入 segues 触发,但您需要有一个自定义的 uitabbarcontroller 类来访问它。您应该能够在 IB developer.apple.com/library/mac/recipes/… 中使用用户定义的运行时属性
  • 我认为这是一个好主意,但不幸的是,该类必须与键值编码兼容,您才能设置这样的运行时属性。由于我会将属性附加到 tabBarItem,除非我自己制作,否则没有机会这样做。我可以使用标签。
  • @Morpheu5 你看到我的回答了吗?这很容易(除非我误解了你的问题)。事实上,我今天才这样做。
  • @RobertVaessen 我试过了,但我发现在标签栏视图控制器上运行 viewDidLoad 时,每个视图控制器的 tabBarItems 都没有初始化。
  • @Morpheu5 哎呀,我错过了你想在 TabBarController 中进行初始化。我已经更新了我的答案。而且,因为我的回答很简单,我怀疑我可能仍然遗漏了一些关于你的情况:-(

标签: ios swift uitabbarcontroller uistoryboardsegue


【解决方案1】:

UITabBarController 是一个容器视图控制器,其中包含的视图控制器在其自身初始化后不久就被初始化。可以类比 UINavigationController 和它的 rootViewController。即使在 Storyboards 中,容器视图控制器和它的视图控制器之间似乎存在一个 segue,这些视图控制器是在初始化时创建的,并且与容器视图控制器同时显示在屏幕上。

【讨论】:

    【解决方案2】:

    那些箭头是关系,而不是转义。

    在您的表格视图控制器的 viewDidLoad 方法中,您可以通过它们的标签栏项来区分它们。

    如果你想从 TabBarController 的 viewDidLoad 方法进行初始化,那么:

    // If restoration IDs were assigned in the Storyboard ....
    func initializeChildren(tabBar: UITabBarController) {
        if let children = tabBar.viewControllers {
            for child in children {
                let table = child as! UITableViewController
                switch table.restorationIdentifier! {
                    case "Tabel 1":
                        table.title = "Cats Table"
                        break
                    case "Table 2":
                        table.title = "Dogs Table"
                        break
                    default:
                        print("Unknown child!!!")
                        break
                }
            }
        }
    }
    
    // If it is okay to "know" the tab order
    func initializeChildren(tabBar: UITabBarController) {
        if let children = tabBar.viewControllers {
            for var i = 0; i < children.count; ++i {
                let table = children[i] as! UITableViewController
                switch  i {
                    case 0:
                        table.title = "Cats Table"
                        break
                     case 1:
                         table.title = "Dogs Table"
                         break
                     default:
                         print("Unknown child!!!")
                         break
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2010-10-20
      • 2013-11-03
      • 2014-08-30
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多