以编程方式在视图控制器中访问视图
问题描述:
我正在以编程方式检索一堆ViewControllers。这些视图控制器的来源是我的故事板,我使用以编程方式在视图控制器中访问视图
let page = storyboard?.instantiateViewController(withIdentifier: "features_view_controller")
我想要做的是,以编程方式访问一个UILabel我有一个视图控制器里面我的故事板创建它们。这样的事情可能吗?
var label = page!.view("identifer")
我该怎么做?
答
你应该@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)
VAR标签=页面.nameOfUrLabel –
你不能识别访问的标签,更容易的选择是创建你的ViewController一个@IBOutlet,然后访问它。 – suhit