Swift代表没有被调用
我有一个代表的视图,我希望在按下按钮时在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 } }
将NumpadPressDelegateProtocol
声明为NumpadPressDelegateProtocol
对于您NumpadPressDelegateProtocol
是不够的。 您还需要在pressDelegate
中设置NumpadView
实例的Gamecontroller
。 假设numpadView
是实例变量,无论是否是IBOutlet,您必须设置委托
在GameController内部初始化
numpadView.pressDelegate = self
你有没有设置pressDelegate
属性? 在您显示的代码中没有赋值。 你在代码的其他地方分配了什么吗?