Как сделать один IBAction, который выполняет одно и то же действие с двумя кнопками, когда первая из пользовательской ячейки, а другая из раскадровки

Это из пользовательской ячейки:

IMG

Это из раскадровки:

IMG

У кого-нибудь есть идеи, как заставить эти две кнопки выполнять одно и то же действие? Можно ли заставить несколько кнопок выполнять одно действие?

2 ответа

Решение

Я обычно держу поддержку UIViewс и UIViewControllerЯ очень тонок в своих приложениях, и я создаю классы, которые выполняют тяжелую работу. Это делает код более чистым и облегчает повторное использование.

class Player {
     static func play() { // Static makes it easier to call from every class, assuming you only play one song at a time
          // play logic goes here
     }
}

class MyView: UIView {
     @IBAction func play() { // connect in IB in your .xib
          Player.play()
     }
}

class MyViewController: UIViewController {
     @IBAction func play() { // connect in IB in your storyboard
          Player.play()
     }
}

Вам нужны два метода IBAction в отдельных классах (для ячейки и для контроллера представления). Если вы хотите минимизировать повторяющийся код, попробуйте создать специальный класс с этой функциональностью, а затем вызовите его метод в двух методах IBAction.

Также вы можете взглянуть на шаблон проектирования Command для этой цели.

Другие вопросы по тегам