Swift: метод протокола как действие в target-action

Я хотел бы иметь протокол:

protocol CameraButtonDelegate: class {
    func cameraButtonDidPress(_ sender: UIButton)
}

Итак, я мог бы назначить любому клиенту кнопку, например:

cameraButton.addTarget(delegate, action: #selector(cameraButtonDidPress), for: .touchUpInside)

Тем не менее, он не компилируется, так как я должен указать конкретную функцию в actionНапример:

cameraButton.addTarget(delegate, action: #selector(AAPLViewController.cameraButtonDidPress), for: .touchUpInside)

Как решить эту проблему, если бы я хотел, чтобы несколько клиентов предназначались для одной кнопки?

2 ответа

Решение

Это должно работать, если вы делаете протокол @objc

@objc protocol CameraButtonDelegate: class {
    func cameraButtonDidPress(_ sender: UIButton
}

и укажите селектор в качестве метода протокола

cameraButtonDidPress.addTarget(delegate, action: #selector(CameraButtonDelegate.cameraButtonDidPress), for: .touchUpInside)

Ты можешь попробовать

cameraButton.addTarget(Service.shared, action: #selector(Service.shared.cameraButtonDidPress(_:)), for: .touchUpInside)

//

class Service {

   static let shared = Service()

    @objc func cameraButtonDidPress (_ sender:UIButton){


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