以编程方式在视图控制器中访问视图

问题描述:

我正在以编程方式检索一堆ViewControllers。这些视图控制器的来源是我的故事板,我使用以编程方式在视图控制器中访问视图

let page = storyboard?.instantiateViewController(withIdentifier: "features_view_controller") 

我想要做的是,以编程方式访问一个UILabel我有一个视图控制器里面我的故事板创建它们。这样的事情可能吗?

var label = page!.view("identifer") 

我该怎么做?

+0

VAR标签=页面.nameOfUrLabel –

+0

你不能识别访问的标签,更容易的选择是创建你的ViewController一个@IBOutlet,然后访问它。 – suhit

你应该@IBOutlet属性添加到您的UIViewController类。

class YourViewController: UIViewController { 
    @IBOutlet weak var label: UILabel! // link it with UILabel in the storyborad. 
} 

然后,你将能够以具有的UILabel访问:

if let page = UIStoryboard().instantiateViewController(withIdentifier: "features_view_controller") as? YourViewController { 
     page.label //your label, which is currently nil, because the view controller still does not draw view. 
    } 

但是如果你需要更新,例如,标签文本,那么你就应该准备“数据传输对象”,并将它传递到你的视图控制器。视图加载后,您可以更新UILabel。下面的示例:

class YourViewController: UIViewController { 
    @IBOutlet weak var label: UILabel! 
    var text: String? //text for label. 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     label.text = text 
    } 
} 

if let page = UIStoryboard().instantiateViewController(withIdentifier: "features_view_controller") as? YourViewController { 
    page.text = "Test" 
    //show page (present or push view controller) or manually send command for drawing view (page.view) 
} 

你可以给标签的子视图和访问,如: - YourController.view.viewWithTag(yoursubviewtag)