2017-02-03 61 views
0

从故事板ViewControllers我有一个UIViewController,看起来有点像这样:实例化斯威夫特

class ProfileViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, ... { 
    ... 

    convenience init(name: String) { 
     print("Init with student: \(name)") 
     self.init() 
    } 
    ... 
} 

我对此有一个相应的故事板布局,嵌入UINavigationViewController,链接到的UITabBarController。这似乎是设计布局的最简单方法,并且非常适用于只需要此VC一个实例(这是应用程序最初设计的方式)。

我现在想从这个单一设计(1到3之间)创建多个选项卡,并以编程方式传递VC init信息,但我不确定是否完成此操作的最佳方式 - 如您所见上面我已经添加了一个基于我已经完成的一些阅读的便利初始化函数,因为这似乎是一个很好的开始。

这是很容易根据情节串连图板布局像这样来创建新的命名标签:

for user in (users)! { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let controller = storyboard.instantiateViewController(withIdentifier: "profileNC") 
    controller.tabBarItem.title = user.name 
    newTabs?.insert(controller, at: 0) 
} 
self.viewControllers = newTabs 

但是,做这种方式我没有得到调用init函数传递UIViewController的信息,则需要正确显示。

如何创建我的ViewControllers,将布局链接到Storyboard并使用自定义初始化函数?这甚至有可能吗?

任何建议感激地赞赏!

+0

只是为了解,为什么你想创建你的UIViewController时调用你的自定义init。我的意思是强制你创建一个自定义初始化器的约束是什么? –

+0

@ Paulw11的回答我已经知道我可以实例化NC,获取子VC,将其作为'ProfileViewController'投射,然后直接设置变量,这似乎是一个明智的方法 - 或者至少它工作到目前为止!我原本以为在设置变量之前会调用ViewDidLoad,所以我需要使用一个自定义的Init - 但反思有点傻,该视图不同于该类。 – Ben

回答

3

使用故事板时,您不能使用自定义的初始程序。您需要直接设置属性,或者在创建视图控制器实例后使用配置函数。