【发布时间】:2017-03-08 15:54:45
【问题描述】:
我的 Storyboard 中有一个 ViewController,它的作用类似于警报(带有标题、消息和两个按钮)。
我想封装它以便能够在我的代码中的任何地方使用它,就像这样:
let alert = CustomAlertViewController(title: "Test", message: "message de test.", view: self.view, delegate: self)
self.present(alert, animated: false, completion: nil)
我的问题是 IBOutlets 没有初始化...
我的 CustomAlertViewController :
public protocol CustomAlertProtocol {
func alertAccepted()
}
class CustomAlertViewController: UIViewController {
var delegate :CustomAlertProtocol? = nil
var parentView :UIView?
var blurScreenshot :SABlurImageView?
var alertTitle :String? = nil
var alertMessage :String? = nil
@IBOutlet weak var oAlertView: UIView!
@IBOutlet weak var oAlertTitle: UILabel!
@IBOutlet weak var oAlertMessage: UILabel!
//MARK: - Main
public convenience init(title: String?, message: String?, view: UIView, delegate: CustomAlertProtocol) {
self.init()
self.alertTitle = title
self.alertMessage = message
self.delegate = delegate
self.parentView = view
}
override func viewDidLoad() {
oAlertTitle.text = self.alertTitle
oAlertMessage.text = self.alertMessage
}
@IBAction func onAcceptButtonPressed(_ sender: AnyObject) {
delegate?.alertAccepted()
}
}
【问题讨论】:
-
要设置 IBOutlets,您需要从情节提要场景或 nib 文件创建视图控制器。您将需要创建一个执行此操作的类函数,而不是使用 Initializer
-
我的 ViewController 在我的故事板中,并且 IBOutlets 是链接的。如果我用 storyboard.instantiateViewController 实例化 IBOutlets 被初始化
-
对。所以创建一个类函数来做这个
标签: ios swift uiviewcontroller delegation