ios - How To Init A UIView That Exists In Interface Builder But Also Requires Init In Code -
यहाँ मेरा दृश्य वर्ग है
class V_TakePhoto: UIView {var _takePhotoClallback: (iImage) - & gt; के लिए मान्य नहीं? आवश्यक init (सांकेतिक शब्दों में बदलनेवाला aDecoder: NSCoder) {super.init (सांकेतिक शब्दों में बदलनेवाला: aDecoder) _takePhotoCallback = शून्य} @IBAction समारोह takePhoto (इस: AnyObject) {println ( "! ये हम चले")} initWithCameraCallback ((iImage) समारोह - & gt; शून्य) {}} यह वर्ग एक UIView उपवर्ग है इंटरफ़ेस बिल्डर में मैंने ViewController वर्ग को चुना, और उसके बाद उसके ऑब्जेक्ट को चुना। मैं इस दृश्य वस्तु को V_TakePhoto सौंपा।
ViewController वर्ग है, जो मैं C_TakePhoto वर्ग के लिए आवंटित में, मैं V_TakePhoto वर्ग init करना चाहते हैं।
आप देख सकते हैं, मैं यह चाहता हूँ कॉलबैक वैरिएबल रखने के लिए कि यह रन टाइम पर पारित हो जाता है हालांकि, क्योंकि दृश्य पहले से ही इंटरफ़ेस बिल्डर से आरंभ हो रहा है, init (coder) को पहले बुलाया जा रहा है।
जैसा कि यह अभी खड़ा है, यह हैकी लगता है कि मुझे 2 init फ़ंक्शंस होने की आवश्यकता है। एक जहां इंटरफ़ेस बिल्डर इसे कॉल करता है, फिर जब मेरा व्यू नियंत्रक उसके कॉलबैक के साथ दृश्य को कम करता है साथ ही मेरे पास कई चर होंगे, और मुझे इनट (सांकेतिक शब्दों में बदलनेवाला) कॉल में उन्हें पूर्व-इनिट करने की जरूरत है, फिर उन्हें फिर से इन-इनिट करें जब व्यू नियंत्रक V_PhotoClass पर 'true' init कहते हैं। मुझे बहुत ही हैकी लगता है, ऐसा करने के लिए एक साफ 'सही' तरीका होना चाहिए।
क्या आप उस स्थिति को संभालने के लिए एक क्लीनर तरीका सुझा सकते हैं जहां आपके पास चर है और इसके बावजूद एक दृश्य इनट (सांकेतिक शब्दों में बदलनेवाला) को इंटरफेस बिल्डर से कॉल करें?
मैं V_TakePhoto में फ़ंक्शन बनाने का सुझाव दूंगा और V_TakePhoto के init (coder) और व्यू नियंत्रक के viewDidLoad () दोनों में कॉल करें, जैसे कुछ: में V_TakePhoto : आवश्यक init (सांकेतिक शब्दों में बदलनेवाला aDecoder: NSCoder) {super.init (सांकेतिक शब्दों में बदलनेवाला: aDecoder) specialInit ()} समारोह specialInit () {/ / अपने कुछ दृश्य प्रारंभिकरण} अपने दृश्य नियंत्रक में:
@IBOutlet कमज़ोर var लेनाफ़ोटो दृश्य: V_TakePhoto! ओवरराइड फ़नस्क दृश्यडिडलोड () {सुपर.व्यूडिडलोड () // इस विधि को देखने नियंत्रक ने स्मृति में इसके दृश्य पदानुक्रम लोड किए जाने के बाद कहा जाता है TakePhotoView.specialInit () / / RE-init}
Comments
Post a Comment