Быстрое делегирование делегата
У меня есть представление с делегатом, что я хочу вызвать numpadView (numpadView:) в GameController при нажатии кнопки, однако я не могу заставить его работать. Перегрузка touchBegan() работает отлично, это действительно строка с pressDelegate?.numpadView(self), которая не вызывает функцию делегата в классе GameController. Я в тупике о том, что не хватает, чтобы заставить его работать?
Я очистил код, чтобы оставить просто существенное, связанное с проблемой, для простоты.
NumpadView.swift
protocol NumpadPressDelegateProtocol {
func numpadView(numpadView: NumpadView)
}
class NumpadView: UIButton{
var pressDelegate: NumpadPressDelegateProtocol?
init(char: Character) {
let frame = CGRectMake(160, 100, 50, 50)
super.init(frame:frame)
self.setTitle("\(char)", forState: UIControlState.Normal)
self.userInteractionEnabled = true
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
pressDelegate?.numpadView(self)
}
}
GameController.swift
class GameController: NumpadPressDelegateProtocol {
func numpadView(numpadView: NumpadView) {
//do something
}
}
Ответы
Ответ 1
Объявление GameController
как NumpadPressDelegateProtocol
недостаточно, чтобы вы могли получить обратный вызов. Вам также нужно установить pressDelegate
экземпляра NumpadView
внутри GameController
. Предполагая, что NumpadView
является переменной экземпляра, это IBOutlet или нет, вы должны установить делегат как
Внутри GameController init
numpadView.pressDelegate = self
Ответ 2
Установили ли вы свойство pressDelegate
? В коде, который вы показали, ничего не назначено. Вы присваиваете ему что-то в другом месте вашего кода?