Swift 委托未被调用
Swift Delegate Not Being Called
我有一个委托视图,我想在按下按钮时在 GameController 中调用 numpadView(numpadView:),但是我无法让它工作。 touchesBegan() 的重载工作正常,它确实是 pressDelegate?.numpadView(self) 的行,它没有调用 GameController class 中的委托函数。我很困惑缺少什么才能让它工作?
为了简单起见,我清理了代码,只留下与问题相关的基本内容。
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
}
}
您是否将 pressDelegate
属性 设置为某项?您显示的代码中没有分配任何内容。你在代码的其他地方给它赋值了吗?
将 GameController
声明为 NumpadPressDelegateProtocol
不足以让您获得回调。您还需要在 Gamecontroller
中设置 NumpadView
实例的 pressDelegate
。假设 numpadView
是实例变量,无论是否为 IBOutlet,您都必须将委托设置为
GameController 内部初始化
numpadView.pressDelegate = self
我有一个委托视图,我想在按下按钮时在 GameController 中调用 numpadView(numpadView:),但是我无法让它工作。 touchesBegan() 的重载工作正常,它确实是 pressDelegate?.numpadView(self) 的行,它没有调用 GameController class 中的委托函数。我很困惑缺少什么才能让它工作?
为了简单起见,我清理了代码,只留下与问题相关的基本内容。
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
}
}
您是否将 pressDelegate
属性 设置为某项?您显示的代码中没有分配任何内容。你在代码的其他地方给它赋值了吗?
将 GameController
声明为 NumpadPressDelegateProtocol
不足以让您获得回调。您还需要在 Gamecontroller
中设置 NumpadView
实例的 pressDelegate
。假设 numpadView
是实例变量,无论是否为 IBOutlet,您都必须将委托设置为
GameController 内部初始化
numpadView.pressDelegate = self