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){
}
}