Быстрый делегат не вызывается

У меня есть представление с делегатом, что я хочу иметь вызов numpadView(numpadView:) в GameController после нажатия кнопки, однако я не могу заставить его работать. Перегрузка функции touchesBegan() работает нормально, это действительно строка с 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
  }

}

2 ответа

Решение

Декларирование GameController как NumpadPressDelegateProtocol Вам недостаточно перезвонить. Вам также необходимо установить pressDelegate из NumpadView экземпляр внутри Gamecontroller, Если предположить, numpadView переменная экземпляра, будь то IBOutlet или нет, вы должны установить делегат как

Внутри GameController init

 numpadView.pressDelegate = self

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

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