Ho una vista con un delegato che voglio avere chiamata numpadView (numpadView :) in GameController alla pressione del pulsante, tuttavia non riesco a farlo funzionare. Il sovraccarico di touchBegan() funziona bene, è davvero la linea con pressDelegate? .numpadView (self) che non chiama la funzione delegate nella classe GameController. Sono perplesso su cosa manca per farlo funzionare?Il delegato Swift non viene chiamato
Ho pulito il codice per lasciare solo l'essenziale correlato al problema per semplicità.
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
}
}
No, non lo faccio. Cosa dovrei assegnare ad esso e dove? –
È necessario creare un oggetto 'GameController' e assegnarlo alla proprietà' pressDelegate'. Poiché 'GameController' è dichiarato conforme al tuo protocollo' NumpadPressDelegateProtocol'. Quindi, quando viene eseguita la funzione 'toccaBegan', ci sarà un oggetto' pressDelegate' per richiamare 'numpadView()' su. –