Проблема с настраиваемым инициализатором в UIView (в вызове отсутствует аргумент для параметра 'coder') - PullRequest
0 голосов
/ 07 августа 2020

Я озадачен следующей проблемой, я занимался этим несколько дней, и я просто не могу понять asp, где я ошибся.

У меня есть UISWitch, который находится внутри UIView. Этот UIVew является заголовком таблицы.

Мне нужно отключить переключатель на основе критериев, которые я написал в отдельном контроллере представления. Эта часть сделана. У меня возникает проблема: что мне нужно сделать, чтобы получить доступ к элементам в этом представлении, когда я пытаюсь создать его экземпляр?

Вот код INIT внутри класса TableHeader UIView

init(user: User, frame: CGRect) {
    self.user = user
    super.init(frame: frame)
    
    backgroundColor = .buttonBackgroundColor
    
    addSubview(profileImageView)
    profileImageView.anchor(top: topAnchor, left: leftAnchor,
                            paddingTop: 4, paddingLeft: 12,
                            width: 64, height: 64)
    profileImageView.layer.cornerRadius = 64 / 2
    
    let stack = UIStackView(arrangedSubviews: [fullnameLabel, emailLabel])
    stack.distribution = .fillEqually
    stack.spacing = 4
    stack.axis = .vertical
    
    addSubview(stack)
    stack.centerY(inView: profileImageView,
                  leftAnchor: profileImageView.rightAnchor,
                  paddingLeft: 12)
    
    if user.status == .online) {
        configureSwitch(enabled: true)
    } else {
        configureSwitch(enabled: false)
    }
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Вот код для переключателя:

lazy var statusSwitch: UISwitch = {
    let s = UISwitch()
    s.isOn = true
    s.tintColor = .white
    s.onTintColor = .buttonFontColor
    s.addTarget(self, action: #selector(handleStatus), for: .valueChanged)
    return s
}()

В моем Home ViewController я пытаюсь создать экземпляр этого UIView, выполнив следующие действия:

private let test = MenuHeader()
test?.statusSwitch.isUserInteractionEnabled = false

Когда я это сделаю, я получите следующую ошибку в строке private let test = MenuHeader(): Отсутствует аргумент для параметра 'coder' в вызове

Любое понимание того, что я делаю неправильно, сообщите.

...