【发布时间】:2017-05-18 02:35:22
【问题描述】:
我正在构建一个应用程序(在 XCode 8.2.1 中),其中一些对象显示在 2D 板上,当用户点击其中一个对象时,应该将一些关于它的信息显示为样式化的模态信息框。我的设计是将信息写在一个单独的视图控制器中,我会在需要时显示它。
我为第二个视图控制器设计了一个基本存根,并在界面构建器中为其添加了一个标签。然后我将此标签 ctrl 链接到我的自定义 VC 类:
class InfoViewController: UIViewController {
@IBOutlet weak var info: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func displayInfo() {
info.attributedText = NSAttributedString(string: "abc")
}
}
但是,当我测试我的应用程序并点击对象时,info 字段即使在我的自定义 VC 类的 viewDidLoad() 方法中也是 nil。我展示我的VC的方式如下:
let infoViewController = InfoViewController()
infoViewController.modalPresentationStyle = .overCurrentContext
self.present(infoViewController, animated: true, completion: nil)
infoViewController.displayInfo()
(注意:最后我将只有一个InfoViewController 的实例,但这只是为了测试。我不希望拥有一个全局实例会有什么不同?)
正如我所说,无论是在viewDidLoad() 方法中还是在displayInfo() 方法中,info 始终是nil,因此设置其attributedString 属性会使应用程序崩溃。考虑到present 方法可能被异步调用,我尝试从viewDidLoad() 内部调用displayInfo(),但这没有任何区别。
谁能告诉我我忘记了什么会让我的IBOutlet 无法正确初始化?
谢谢!
大卫
【问题讨论】:
-
你使用故事板吗?如果是,那么我假设您应该从情节提要中获取
InfoViewController,而不是通过创建新实例...
标签: ios swift xcode uiviewcontroller viewdidload