我有一个委托(delegate) View ,我想在按下按钮时在 GameController 中调用 numpadView(numpadView:),但是我无法让它工作。 touchesBegan() 的重载工作正常,它实际上是 pressDelegate?.numpadView(self) 的行,它没有调用 GameController 类中的委托(delegate)函数。我很困惑缺少什么才能使其正常工作?
为了简单起见,我清理了代码,只留下与问题相关的基本部分。
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
}
}
最佳答案
将 GameController
声明为 NumpadPressDelegateProtocol
不足以让您获得回调。您还需要在 Gamecontroller
中设置 NumpadView
实例的 pressDelegate
。假设 numpadView
是实例变量,无论是否为 IBOutlet,您都必须像这样设置委托(delegate)
内部 GameController 初始化
numpadView.pressDelegate = self
关于ios - 未调用 Swift 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853482/