如何初始化接口生成器中存在的UIView但在代码中也需要Init

时间:2014-10-10 15:42:40

标签: ios xcode uiview uiviewcontroller swift

这是我的观点类

class V_TakePhoto:UIView{

    var _takePhotoCallback:(iImage)->Void?

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        _takePhotoCallback = nil
    }


    @IBAction func takePhoto(sender: AnyObject) {

        println("Here we go!")
    }


    func initWithCameraCallback((iImage)->Void)
    {

    }

}

这个类是一个UIView子类。在界面构建器中,我选择了ViewController类,然后选择了它的View对象。我将V_TakePhoto分配给此视图对象。

在我分配给C_TakePhoto类的ViewController类中,我想初始化V_TakePhoto类。

正如您所看到的,我希望它有一个在运行时传递的回调变量。但是,因为视图已经从界面构建器初始化,所以首先调用init(编码器)。

现在看起来很困难,我需要有2个init函数。接口构建器调用它的地方,然后当我的ViewController通过其回调进入视图时再次调用它。此外,我将有许多变量,我需要在init(编码器)调用中预先启动它们,然后在ViewController调用' true'时再次重新启动它们。在V_PhotoClass上初始化。对我来说似乎非常苛刻,必须有一个干净,正确的'这样做的方法。

你是否可以建议一种更简洁的方法来处理你有变量并且需要初始化视图的情况,尽管有来自界面构建器的init(编码器)调用?

1 个答案:

答案 0 :(得分:0)

我建议在V_TakePhoto中创建一个函数,并在V_TakePhoto的{​​{1}}和ViewController的init(coder)中调用它,例如:

viewDidLoad()

V_TakePhoto

在视图控制器中:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    specialInit()
}

func specialInit() {
    // some of your view initialization
}