繁体   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