2015-06-19 26 views
5

में टैग का उपयोग मेरे पास मेरे नियंत्रक में लगभग 15 UIButtons हैं। मैं उनमें से 10 को लूप के लिए सरल से साफ़ करने की कोशिश कर रहा हूं और ऐसा लगता है कि मुझे किसी तरह का संघर्ष मिल रहा है।स्विफ्ट

Could not cast value of type '_UISizeTrackingView' (0x18a023c) to 'UIButton' (0x1899298). (lldb)

पाश के लिए है:

for var i = 0; i < 9; i++ { 
    button = view.viewWithTag(i) as! UIButton 
    button.setImage(nil, forState: .Normal) 
} 

मैं एक आइटम है कि उपयोग कर रहा है के साथ किसी समस्या के लिए नीचे यह संकुचित है

जब मैं स्पष्ट करने के लिए बटन हिट, मैं निम्नलिखित त्रुटि मिलती है टैग 0. मैंने अपने व्यू कंट्रोलर सीन पर सभी आइटमों को देखा है और किसी भी टकराव को नहीं लग रहा है। मुझे टैग = 0.

का उपयोग करके केवल एक बटन दिखाई देता है, मैंने इसे '0' के साथ लूप में 'i' को बदलकर भी एक ही समस्या प्राप्त की है। जब मैंने इसे '1' या '2' से बदल दिया, तो उस एकल छवि के साथ ठीक काम करता है।

कोई भी तरीका यह देखने के लिए कि कौन सा ऑब्जेक्ट टैग 0 का उपयोग कर रहा है? मैंने उन सभी पर क्लिक किया है (मुख्य 'व्यू' सहित) लेकिन कुछ भी ढूंढने लगते हैं।

उत्तर

9

जैसा कि पहले से ही @ranunez द्वारा कहा गया था, डिफ़ॉल्ट टैग 0 है। मैं गैर-शून्य टैग का उपयोग करने की सलाह से सहमत नहीं हूं।

मेरी सलाह है, टैग का उपयोग न करें। यदि आप कोड में दृश्य का उपयोग करना चाहते हैं, तो इसके लिए एक आउटलेट घोषित करें और इसे कनेक्ट करें। यदि आप कई विचारों पर पुनरावृत्ति करना चाहते हैं, तो अपने आउटलेट से एक सरणी बनाएं या आउटलेट के संग्रह का उपयोग करें:

@IBOutlet var buttons: [UIButton]! 
+0

ग्रेट सॉल्यूशन! – ranunez

+0

एक अतिरिक्त बोनस के रूप में, अब हम इनके माध्यम से इनके लिए 'इन' कर सकते हैं। मुझे स्विफ्ट के बारे में पता नहीं है, लेकिन उद्देश्य-सी में 'इन इन' के लिए प्रश्न में मूल सी-शैली 'के लिए निश्चित रूप से तेज़ होगा। – nhgrif

+0

@ सुल्तान लोग टैग से अधिक आउटलेट का उपयोग क्यों करते हैं? मेरा मतलब है कि यह कोड की लंबाई को कम करता है! क्या मुझे अच्छा लगता है या क्या मैं टैग का उपयोग कर जटिलता में वृद्धि कर रहा हूं? –

1

डिफ़ॉल्ट रूप से, विचारों का 0 का टैग होता है, इसलिए आपको 0 के टैग के साथ अपनी ऑब्जेक्ट्स को निकालने के लिए इस पर भरोसा नहीं करना चाहिए। अपने बटन को टैग का एक अलग सेट देने का प्रयास करें, पूर्व: 1000, 1001, 1002, आदि के बजाय