Подтвердить что ты не робот

Быстрое делегирование делегата

У меня есть представление с делегатом, что я хочу вызвать 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
  }

}
4b9b3361

Ответ 1

Объявление GameController как NumpadPressDelegateProtocol недостаточно, чтобы вы могли получить обратный вызов. Вам также нужно установить pressDelegate экземпляра NumpadView внутри GameController. Предполагая, что NumpadView является переменной экземпляра, это IBOutlet или нет, вы должны установить делегат как

Внутри GameController init

 numpadView.pressDelegate = self

Ответ 2

Установили ли вы свойство pressDelegate? В коде, который вы показали, ничего не назначено. Вы присваиваете ему что-то в другом месте вашего кода?