ボタンを押すとGameControllerでnumpadView(numpadView :)を呼び出す代理人のビューがありますが、動作させることはできません。 touchesBegan()のオーバーロードはうまくいきます。実際にはGameControllerクラスのデリゲート関数を呼び出さないpressDelegate?.numpadView(self)の行です。私はそれが動作するように何が欠けているとして困っていますか?スウィフト代理人が呼び出されていない
簡単にするために、問題に不可欠なものだけを残してコードを消去しました。
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'オブジェクトを作成し、それをあなたの' pressDelegate'プロパティに割り当てる必要があります。 'GameController'はあなたの' NumpadPressDelegateProtocol'プロトコルに準拠すると宣言されています。そして 'touchesBegan'関数が実行されると、' numPadView() 'を呼び出すための' pressDelegate'オブジェクトがあります。 –