如何在iOS的ViewController扩展中初始化ui元素

时间:2018-10-23 12:03:02

标签: ios swift viewcontroller swift-extensions

我有一个视图控制器,该控制器具有以编程方式创建的标签,如下所示。

class MyController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        setupUI()
    }

    func setupUI() {
       // added an setup the view constraints.
    }
}
  

这正常工作。然后,我尝试通过创建如下扩展来将视图控制器的所有UI元素移至其扩展:

private extension MyController {

    var label: UILabel = {
      **// tried to initialize the label like this. but getting cannot use stored property in extension error**
    }()

// then tried like below
    var mylabel: UILabel! {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = "Hello"
            return label
        }

     func setupUI() {
        // with the second option I getting nil value error.
        }
}
  

如何以编程方式初始化Viewcontroller扩展中的UI元素以进行内部访问。

2 个答案:

答案 0 :(得分:1)

尝试一下:

uielements.swift

extension MyController {
    static let myLabel: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.text = "Hello"
        return label
    }()
}

myController.swift

class MyController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    private func setupUI() {
        view.addSubview(RootVC.myLabel)
    // Add layout constraints here
    }

}

答案 1 :(得分:0)

错误提示,不允许在扩展中声明变量。

  

您提到要在   扩展名。当然可以。但是,您所拥有的   扩展不仅是初始化的声明。

在控制器中具有声明,在扩展方法中具有初始化。