2015-01-09 16 views
10

मेरे पास एक प्रतिनिधि के साथ एक दृश्य है कि मैं बटन प्रेस पर गेम नियंत्रक में कॉल numpadView (numpadView :) रखना चाहता हूं, हालांकि मैं इसे काम नहीं कर सकता। स्पर्शों का अधिभार बेगन() ठीक काम करता है, यह वास्तव में प्रेसडिलेट के साथ लाइन है? एनम्पैड व्यू (स्वयं) जो गेमकंट्रोलर क्लास में प्रतिनिधि समारोह को कॉल नहीं करता है। मैं काम करने के लिए क्या खो रहा है के रूप में फंस गया हूँ?स्विफ्ट प्रतिनिधि को कॉल नहीं किया जा रहा

मैंने कोड को केवल सादगी के लिए समस्या से संबंधित आवश्यक छोड़ने के लिए साफ़ किया।

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 
    } 

} 

उत्तर

22

GameControllerNumpadPressDelegateProtocol को कॉलबैक प्राप्त करने के लिए पर्याप्त नहीं है। आपको Gamecontroller के अंदर NumpadView उदाहरण के pressDelegate को भी सेट करने की आवश्यकता है। मान लिया जाये कि numpadView उदाहरण चर यह IBOutlet है या नहीं, तो आप

अंदर GameController तरह प्रतिनिधि सेट करने के लिए है

numpadView.pressDelegate = self 
2

आप कुछ करने के लिए pressDelegate गुण सेट है? आपके द्वारा दिखाए गए कोड में कुछ भी असाइन नहीं किया गया है। क्या आप इसे अपने कोड में कहीं और सौंपते हैं?

+0

नहीं init, मुझे नहीं पता। मुझे इसे क्या सौंपा जाना चाहिए और कहां? –

+0

आपको 'GameController' ऑब्जेक्ट बनाने की आवश्यकता है और इसे अपने 'प्रेसडिलेगेट' संपत्ति को असाइन करें। चूंकि 'GameController' को आपके' NumpadPressDelegateProtocol' प्रोटोकॉल के अनुरूप घोषित किया गया है। फिर, जब आपका 'स्पर्श करता है' फ़ंक्शन निष्पादित होता है, तो 'numpadView()' को कॉल करने के लिए 'प्रेसडिलेगेट' ऑब्जेक्ट होगा। –

संबंधित मुद्दे