iOS(swift) - 自定义视图控制器XIB中的自定义视图

时间:2015-04-13 16:11:55

标签: ios swift uiview uiviewcontroller

我正在尝试创建一个屏幕,其中包含一行自定义按钮(以及其他内容)。为了便于重用,我有一个自定义类(xib和swift文件)用于按钮(MyButton:UIView)和按钮行(MyRowController:UIViewController)。在MyRowController.xib中,我有一排按钮,它们有" Custom Class"属性设置为MyButton。我正在尝试将MyRowController的一个实例添加到屏幕(MyViewController:UIViewController),如下所示:

 let nib = UINib(nibName: "MyRowController", bundle: NSBundle.mainBundle())
 let row = nib.instantiateWithOwner(self, options: nil)[0] as MyRowController
 self.view.addSubview(row.view)

不幸的是,这会导致MyButton的awakeFromNib方法崩溃: "致命错误:在展开可选值"

时意外发现nil
 @IBOutlet weak var grayBackgroundView: UIView!
 override func awakeFromNib() {
    super.awakeFromNib()
    grayBackgroundView.backgroundColor = UIColor.whiteColor()
 }

显然,当调用awakeFromNib时,尚未实例化grayBackgroundView(如果我注释掉grayBackgroundView行,则没有崩溃,但我的MyButton视图中没有显示任何标签或图像)。当我尝试将MyButton直接添加到MyViewController(删除MyRowController作为中间人)时,一切正常 - 没有崩溃,所有标签/图像都正常显示。

我也试过让MyRowController成为UIView的子类,同样的事情发生了。

我是iOS新手,所以如果这是重复使用视图的非标准/可怕方式,请告诉我们。我不确定我是否应该在MyRowController的初始化程序中做一些事情来帮助实例化MyButtons(目前除了调用super.init(编码器:aDecoder)之外什么都没做)?

非常感谢任何指导!

0 个答案:

没有答案