Swift: попытка выполнить две функции с делегированием - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь выполнить две функции в другом виде нажатием двух кнопок. Каждая кнопка должна вызывать одну из функций, которая передается через делегирование. Но похоже, что когда я нажимаю одну из кнопок, они выполняют обе функции протокола одновременно. Только когда я комментирую / удаляю одну функцию, она работает.

Протокол:

protocol ManipulateSectionDelegate {
    func addSection()
    func removeSection()
}

MainView: вот функции, которые должны вызываться при нажатии кнопок во втором View

extension MainViewController: ManipulateSectionDelegate{

    @objc func showSettingsView(){
        let settingsController = SettingsViewController()
        settingsController.delegateManipuplateSection = self
        navigationController?.pushViewController(settingsController, animated: true)
    }

    func addSection(){
        semesterList.append(Semester.init(subject: [], done: false))
        subjectTableView.reloadData()
        print(semesterList)
    }

    func removeSection(){
        semesterList.removeLast()
        subjectTableView.reloadData()
        print(semesterList)
    }

}

Second View :

class SettingsViewController:UIViewController{

    var delegateManipuplateSection: ManipulateSectionDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()

        addSectionButton.addTarget(self, action: #selector(addSectionButtonPressed), for: .touchUpInside)

        addSectionButton.addTarget(self, action: #selector(removeSectionButtonPressed), for: .touchUpInside)

    }
}


extension SettingsViewController{

    @objc func addSectionButtonPressed(){
        delegateManipuplateSection?.addSection()
    }

    @objc func removeSectionButtonPressed(){
        delegateManipuplateSection?.removeSection()
    }    
}

Даже если каждая кнопка связана с отдельной функцией и должна выполнять только одну из них, обе выполняются. Это ситуация, когда мне пришлось бы использовать наблюдателей и уведомления? Я сделал что-то не так?

1 Ответ

0 голосов
/ 16 февраля 2020

Вы подключили два действия к одной одной и той же кнопке

    addSectionButton.addTarget(self, action: #selector(addSectionButtonPressed), for: .touchUpInside)

    addSectionButton.addTarget(self, action: #selector(removeSectionButtonPressed), for: .touchUpInside)
...