Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何识别哪一个;“关系”;跟随的是一个超级阿巴斯控制器吗?_Ios_Swift_Uitabbarcontroller_Uistoryboardsegue - Fatal编程技术网

Ios 如何识别哪一个;“关系”;跟随的是一个超级阿巴斯控制器吗?

Ios 如何识别哪一个;“关系”;跟随的是一个超级阿巴斯控制器吗?,ios,swift,uitabbarcontroller,uistoryboardsegue,Ios,Swift,Uitabbarcontroller,Uistoryboardsegue,我在这张照片中说明了这种情况 简而言之,我有一个可以以不同方式配置的视图控制器,我希望能够通过IB指定这些方式。我认为这两个箭头是分段的,所以我想我应该覆盖prepareforsgue:sender:,并根据每个segue的id配置目标视图控制器。我只需要在初始化时执行一次,所以我认为该方法可以工作。然而,这两个箭头并不是分段的——或者至少prepareforsgue:sender:不会为它们开火 像这样的事情能做到吗?在最坏的情况下,我可以通过编程实现这一点,这没什么大不了的,但我认为故事板

我在这张照片中说明了这种情况

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


像这样的事情能做到吗?在最坏的情况下,我可以通过编程实现这一点,这没什么大不了的,但我认为故事板很酷,所以为什么不使用它们呢?

UITabBarController是一种容器视图控制器,其中包含的视图控制器在其自身初始化后不久就会初始化。可以将UINavigationController与其rootViewController进行类比。尽管在故事板中,容器视图控制器与其视图控制器之间似乎存在一个分段,但这些视图控制器是在初始化时创建的,并与容器视图控制器同时显示在屏幕上。

UITabBarController是一个容器视图控制器,其中包含了视图控制器在其自身初始化后不久初始化。可以将UINavigationController与其rootViewController进行类比。尽管在故事板中,容器视图控制器与其视图控制器之间似乎存在一个分段,但这些视图控制器是在初始化时创建的,并与容器视图控制器同时显示在屏幕上。

这些箭头是关系,而不是分段

在表视图控制器的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
            }
        }
    }
}
//如果在情节提要中分配了恢复ID。。。。
func initializeChildren(选项卡栏:UITabBarController){
如果let children=tabBar.viewControllers{
儿童中的儿童{
让table=child作为!UITableViewController
switch table.restorationIdentifier{
案例“表1”:
table.title=“猫表”
打破
案例“表2”:
table.title=“狗表”
打破
违约:
打印(“未知子项!!!”)
打破
}
}
}
}
//如果可以“了解”选项卡顺序
func initializeChildren(选项卡栏:UITabBarController){
如果let children=tabBar.viewControllers{
对于变量i=0;i
这些箭头是关系,而不是顺序

在表视图控制器的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
            }
        }
    }
}
//如果在情节提要中分配了恢复ID。。。。
func initializeChildren(选项卡栏:UITabBarController){
如果let children=tabBar.viewControllers{
儿童中的儿童{
让table=child作为!UITableViewController
switch table.restorationIdentifier{
案例“表1”:
table.title=“猫表”
打破
案例“表2”:
table.title=“狗表”
打破
违约:
打印(“未知子项!!!”)
打破
}
}
}
}
//如果可以“了解”选项卡顺序
func initializeChildren(选项卡栏:UITabBarController){
如果let children=tabBar.viewControllers{
对于变量i=0;i
prepareforsgue
应该为嵌入序列启动,但您需要有一个自定义uitabbarcontroller类来访问它。您应该能够在IB中使用用户定义的运行时属性,我认为这是一个好主意,但不幸的是,该类必须符合键值编码,您才能设置这样的运行时属性。因为我将属性附加到tabBarItem,所以除非我自己创建属性,否则不可能这样做。我可以用标签。@Morpheu5你看到我的答案了吗?这太容易了(除非我误解了你的问题)。事实上,我是今天才这么做的。@RobertVaessen我试过了,但我发现在选项卡栏视图控制器上运行viewDidLoad时,每个视图控制器的Tabbaritem都没有初始化。@Morpheu5哦,我没有注意到您想在TabBarController中进行初始化。我已经更新了我的答案。而且,因为我的答案很简单,我怀疑我可能仍然遗漏了一些关于您的情况的信息:-(
prepareForSegue
应该为嵌入的segue触发,但是您需要有一个自定义的uitabbarcontroller类来进行访问