Swift代表没有被调用

时间:2015-01-09 03:41:47

标签: ios swift uikit

我有一个代表的视图,我希望在按下按钮时在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
  }

}

2 个答案:

答案 0 :(得分:26)

GameController声明为NumpadPressDelegateProtocol并不足以让您获得回调。您还需要在pressDelegate内设置NumpadView实例的Gamecontroller。假设numpadView是实例变量,无论是否是IBOutlet,您必须设置委托

Inside GameController init

 numpadView.pressDelegate = self

答案 1 :(得分:2)

您是否将pressDelegate属性设置为某些内容?在您显示的代码中没有分配任何内容。你在代码的其他地方分配了什么东西吗?