У меня есть tableview
с тремя рядами. Во втором ряду есть переключатель UIS, который, когда он выключен, третий ряд должен быть скрыт, а когда он включен, он будет показан.
Я использую делегат для этого:
вот протокол:
protocol ChangeStatusOFSwitchBtnDelegate {
func toggle(isOn: Bool)
}
и вот конфигурация делегата в UITableViewCell
@IBOutlet weak var deadlineSwitchState: UISwitch!
func configure(swicthIsOn: Bool, delegate: ChangeStatusOFSwitchBtnDelegate) {
deadlineSwitchState.isOn = swicthIsOn
self.switchBtnDelegate = delegate
}
@IBAction func changeStateToggle(_ sender: UISwitch) {
if deadlineSwitchState.isOn == true {
switchBtnDelegate!.toggle(isOn:true)
} else {
switchBtnDelegate!.toggle(isOn:false)
}
}
var switchBtnDelegate: ChangeStatusOFSwitchBtnDelegate?
и вот некоторая часть кодов в UIViewController
class AddListPopup: UIViewController, UITableViewDelegate, UITableViewDataSource, ChangeStatusOFSwitchBtnDelegate {
// Delegate
private var switchBtnIsOn = false
func toggle(isOn: Bool) {
self.switchBtnIsOn = isOn
NewListDetailsTableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (taskCellArray.count - 1 ) + (switchBtnIsOn ? 1 : 0)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
indexPath.row == 1 {
let switchCell = tableView.dequeueReusableCell(withIdentifier: "switch cell", for: indexPath) as! NewListPopupViewCell
switchCell.configure(swicthIsOn: switchBtnIsOn, delegate: self) //Set delegate here
return switchCell
}
return UITableViewCell()
}
проблема:
Я получу две ошибки здесь:
во-первых, если я разверну switchBtnDelegate
в UITableViewCell
так же, как код, который вы видите здесь, я получу:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
эта ошибка появляется здесь:
@IBOutlet weak var deadlineSwitchState: UISwitch!
@IBAction func changeStateToggle(_ sender: UISwitch) {
if deadlineSwitchState.isOn == true {
switchBtnDelegate!.toggle(isOn:true) //The error appears here
} else {
switchBtnDelegate!.toggle(isOn:false)
}
}
var switchBtnDelegate: ChangeStatusOFSwitchBtnDelegate?
а если я буду использовать? оставить его необязательным:
@IBOutlet weak var deadlineSwitchState: UISwitch!
@IBAction func changeStateToggle(_ sender: UISwitch) {
if deadlineSwitchState.isOn == true {
switchBtnDelegate?.toggle(isOn:true)
} else {
switchBtnDelegate?.toggle(isOn:false)
}
}
var switchBtnDelegate: ChangeStatusOFSwitchBtnDelegate?
Я получил эту ошибку:
class AppDelegate: UIResponder, UIApplicationDelegate { Thread 1: signal SIGABRT
Может ли кто-нибудь помочь мне понять, откуда возникла проблема?
Большое спасибо