簡體   English   中英

沒有調用Swift代表

[英]Swift Delegate Not Being Called

我有一個具有委托的視圖,我想在按下按鈕時在GameController中調用numpadView(numpadView :),但是我無法使其正常工作。 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
  }

}

GameControllerNumpadPressDelegateProtocol聲明為NumpadPressDelegateProtocol不足以使您獲得回調。 您還需要在pressDelegate中設置NumpadView實例的Gamecontroller 假設numpadView是實例變量(無論是否為IBOutlet),您都必須將委托設置為

在GameController內部初始化

 numpadView.pressDelegate = self

您是否將pressDelegate屬性設置為某些值? 您顯示的代碼中未分配任何內容。 您是否在代碼的其他位置為其分配了某些內容?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM