斯威夫特:使用" self"在公共函数中定位父ViewController?

时间:2015-02-17 13:39:04

标签: ios swift uiview

我想创建“组件”以将它们添加到UI,在公共函数中定义它们,如:

public func addBackground () {
var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.view.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.view.addSubview(myWhiteView)
        println("added white")
    }

}

显然,如果我不在UIViewController类中,请使用self。是不允许/可能的。我如何定位父ViewController谁可能会在以后?

1 个答案:

答案 0 :(得分:2)

让函数接受UIView类型的参数:

public func addBackground (view: UIView) {
    var myWhiteView = UIView()
    myWhiteView.frame = CGRectMake(0, 0, view.frame.width, 30)
    myWhiteView.backgroundColor = UIColor.whiteColor()

    view.addSubview(myWhiteView)
    println("added white")
}

如果您确实需要使用视图控制器,请将参数更改为UIViewController,否则我建议保留UIView,因为它更通用,您可以使用任何视图。

作为替代解决方案,您可能需要考虑将扩展名添加到UIView

extension UIView {
    public func addBackground () {
        var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.addSubview(myWhiteView)
        println("added white")
    }
}

UIViewController

extension UIViewController {
    public func addBackground () {
        var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.view.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.view.addSubview(myWhiteView)
        println("added white")
    }
}