2012-03-14 9 views
21

मेरे कोड में मेरे पास स्टोरीबोर्ड के अंदर स्थिर सेल वाला एक टेबल है। मैं अंतिम स्थैतिक सेल पर क्लिक करने के लिए एक विधि को आग लगाने की कोशिश कर रहा हूं।तालिका दृश्य में एक स्टेटिक सेल से एक विधि को फायर करें नियंत्रक

ऐसा करने के लिए मुझे कोड में क्या लिखना चाहिए। मैं फायरिंग त्रुटि के बिना कोड के अंदर स्थैतिक कोशिकाओं को कैसे संदर्भित कर सकता हूं।

उत्तर

76

फोन ViewController में जोड़ने के लिए:

@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell; 

कनेक्ट कि स्टोरीबोर्ड में सेल के लिए आउटलेट।

अब tableView:didSelectRowAtIndexPath विधि में:

UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath]; 
if (theCellClicked == theStaticCell) { 
    //Do stuff 
} 
+0

मुझे 'self.table' को' self.tableView' में बदलना पड़ा। – Nestor

+0

बहुत उपयोगी, धन्यवाद। – LpLrich

+0

लेकिन क्या यह अनुकूलित है? यदि यह एक स्थिर सेल नहीं है तो यह एक नया सेल बनाएगा? – CiNN

9

स्थैतिक कोशिकाओं के साथ, आप अभी भी - tableView:didSelectRowAtIndexPath: लागू कर सकते हैं और इंडेक्सपाथ की जांच कर सकते हैं। एक दृष्टिकोण है, कि तुम, #define साथ विशेष indexPath परिभाषित करते हैं, और देखने के लिए कि seleted पंक्ति कि indexPath पर है की जाँच करें, और अगर हां [self myMethod].

+0

मैंने कोशिश की, जब index indexPath.row कॉल करें, तो रनटाइम के दौरान मुझे एक त्रुटि वापस फेंकता है। मैं तीसरी धारा 2 पंक्ति कैसे देख सकता हूं? – carbonr

+0

यदि ([इंडेक्सपाथ isEqual: [NSIndexPath indexPathForRow: 1 inSection: 2]]) [self myMethod]; – Canopus

+0

किस तरह से त्रुटि है? – Canopus

3

यहाँ मेरी ले जब स्थिर और गतिशील कोशिकाओं के मिश्रण,

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
        if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath { 
// ADD CODE HERE 
       } 
     } 

इस एक नया सेल बनाने टाल है। हम सभी सेल बना सकते हैं और cellForRowAtIndexPath

0

में कॉन्फ़िगर Cinn जवाब के बाद किया जाता है, इस स्विफ्ट 3 संस्करण कि इस मुद्दे को हल करती है। विशेष रूप से यदि आप स्टोरीबोर्ड पर स्थिर कोशिकाओं का उपयोग कर रहे

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let staticIndexPath = tableView.indexPath(for: OUTLET_TO_YOUR_CELL), staticIndexPath == indexPath { 
     // ADD CODE HERE 
    } 
} 

इस दृष्टिकोण, आवश्यक नहीं cellForRow विधि लागू करने के लिए अनुमति देते हैं।

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