Изменить тип кнопки IBOutlet - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь достичь чего-то, я не уверен, выполнимо ли это. У меня есть xib для UITableViewCell, в котором есть кнопка UIB с пользовательским классом, назначенным в раскадровке, т.е. MainButtonSuperClass. В UITableViewCell.swift розетка подключена следующим образом:

@IBOutlet weak var button: MainButtonSuperClass!

Многие различные контроллеры настраивают TableViewCell, но пользовательский интерфейс кнопки будет отличаться для всех этих контроллеров, как определено в подклассе, т.е.

    final class MainButtonSubClass: MainButtonSuperClass {
        override func configure(){//different style of button }
    }

Как мне этого добиться? до сих пор я попробовал следующее,

let button: MainButtonSuperClass =  MainButtonSubClass()
button.configure()
cell.button = button

Но это не выбирает стиль

РЕДАКТИРОВАТЬ:

//tableview cell
class TableViewCell: UITableViewCell {
    @IBOutlet weak var button: MainButtonSuperClass!
}

//Controller A wants default style of superclass (MainButtonSuperClass)
func configureButton(buttonCell: TableViewCell) {        
    buttonCell.button.configure() //works
}

//Controller B wants different style of subclass (MainButtonSubClass)
func configureButton(buttonCell: TableViewCell) {        
    let button: MainButtonSuperClass =  MainButtonSubClass()
    button.configure()
    cell.button = button // doesn't work or adopts the style
}


//Custom button's classes
final class MainButtonSuperClass: UIButton {
     override func configure(){//styled button }
}

final class MainButtonSubClass: MainButtonSuperClass {
     override func configure(){//different style of button }
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

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

0 голосов
/ 14 апреля 2020

Хорошо, понимаем, давайте попробуем этот

класс CustomClass: UIButton {

class Type1Class: UIButton {
    // Do all the setup here

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

class Type2Class: UIButton {
    // Do all the setup here

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

}

Затем вы можете инициализировать его следующим образом:

@IBOutlet weak var button: CustomClass.Type1Class!

Надеюсь, это поможет!

...