Как инициализировать элементы пользовательского интерфейса в моем расширении ViewController в ios, swift - PullRequest
0 голосов
/ 23 октября 2018

У меня есть контроллер представления, который имеет программно созданную метку, как показано ниже.

class MyController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        setupUI()
    }

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

Это работает правильно.Затем я попытался переместить все элементы пользовательского интерфейса контроллера представления в его расширение, создав расширение, как показано ниже:

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 для доступавнутренне.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Попробуйте это:

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
    }

}
0 голосов
/ 23 октября 2018

Поскольку ошибка говорит, что вы не можете объявлять переменные в расширении.

Вы упоминаете, что хотите инициализировать элемент пользовательского интерфейса в расширениях.Конечно, вы можете сделать это.Но в расширении есть объявление не только инициализации.

Имеет объявление в контроллере и инициализацию в методе расширения.

...