2012-11-05 20 views
7

मैं आईओएस ऐप बना रहा हूं जो टेबलव्यू बेस है। यहां मैं क्या करना चाहता हूं। तालिकादृश्य 1 -> तालिकादृश्य 2 एक बार जब मैं तालिका तालिका में से एक का चयन करता हूं, तो नया तालिका दृश्य 2 दिखाया जाता है। मैं नई तालिका दृश्य से पहले सेल को हाइलाइट करना चाहता हूं। फिर भी, नई तालिका लोड करने के कारण हाइलाइट इतनी धीमी है डेटा देखें। मैंने इसे देखा। prepareForSegue का कारण didSelectRowAtIndexPath से पहले कहा जाता है।तैयार करने से पहले didSelectRowAtIndexPath को कॉल करने के लिए कैसे करें?

तो क्या आप मुझे बता सकते हैं कि didSelectRowAtIndexPathprepareForSegue से पहले कैसे कॉल करें?

या मुझे बताएं कि कक्ष का चयन करते समय तालिका कक्ष कैसे सेट अप करें।

सभी बेहतरीन। controller- के लिए

उत्तर

1
  1. मेक segue> controler
  2. didselectrowatindexpath
  3. इसके पूर्ण हो जाने में रन डेटा लोड हो रहा है -> प्रदर्शन अपने segue
+0

Performsegue बेहतर जवाब है में इस मूल्य का उपयोग कर सकते हैं। लेकिन एक और समस्या हुई है। लेकिन वैसे भी धन्यवाद! –

0

यहाँ है कि कैसे आप चाहिए सेटअप आपके विचार नियंत्रकों:

  1. जब दृश्य नियंत्रक आवास तालिका 1 लोड लोड होता है, तालिका दृश्य 1 के डेटा में लोड होता है।
  2. tableView:didSelectRowAtIndexPath: में कहा जाता है, performSegue: का उपयोग कर सेगू को आग लगाना।
  3. दृश्य नियंत्रक आवास तालिका डेटा में तालिका दृश्य के लिए दृश्य 2 लोड, लोड 2.

ऐसा लगता है जब आप तालिका देखें 2 समय से पहले ही के लिए डेटा लोड हो रहा हो सकता है की तरह --- यही वजह है कि आप है ' अंतराल को देख रहे हैं। चूंकि आप अपने डेटा लोडिंग के साथ मुख्य धागा बांध रहे हैं, यूआई में आपको नीली हाइलाइट अपडेट करने और दिखाने की क्षमता नहीं है।

यदि आप viewDidLoad विधि में अपना डेटा लोड करते हैं, तो जब आप कोई तालिका दृश्य कक्ष चुनते हैं तो आप महंगी भार से बचेंगे। आपको केवल tableView:didSelectRowAtIndexPath: विधि में विस्तार दृश्य नियंत्रक को सेगू करने के लिए अपने व्यू कंट्रोलर को बताना चाहिए।

+0

धन्यवाद यह काम करता है। निष्पादन अब तक बेहतर उत्तर है। –

20

आप इसे करने के दो अलग-अलग तरीकों को जा रहे हैं।

1 - - पहले वैकल्पिक केवल स्टोरीबोर्ड और prepareForSegue का उपयोग करें:

स्टोरीबोर्ड में दूसरा ViewController करने के लिए अपने प्रोटोटाइप सेल कनेक्ट (कनेक्शन सेल से शुरू करते हैं और दूसरी ViewController पर समाप्त होना चाहिए)। इस मामले में, आपको केवल तैयार करना चाहिए ForSegue विधि और नहीं किया SeelectRowAtIndexPath। दूसरा VC तैयार करने के बाद स्वचालित रूप से धक्का दिया जाता है।

2 - दूसरा वैकल्पिक - उपयोग didSelectRowAtIndexPath:

आप didSelectRowAtIndexPath का प्रयोग तभी करें जब आप पहली बार ViewController (और सेल से नहीं) दूसरे ViewController करने से segue कनेक्ट। didSelectRowAtIndexPath विधि के अंत में, आपको performSegue को कॉल करना होगा।

+0

धन्यवाद! यह काम करता है, लेकिन एक और समस्या आई है। मैं इसके बारे में नया धागा पोस्ट करूंगा। –

+16

यदि आप पहले विकल्प का उपयोग कर रहे हैं और तालिका में सेल की स्थिति के आधार पर कार्रवाई करने की आवश्यकता है, तो सही इंडेक्स पाथ प्राप्त करने के लिए इसका उपयोग करें: NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; – mpemburn

+0

दूसरा विकल्प मेरे लिए काम किया। –

1

आपको निम्न कार्य की आवश्यकता है। इसे तैयार करने से पहले कहा जाएगा ForSegue। सबसे पहले आप तो आप कक्षा में एक वर को परिभाषित bellow की तरह इस समारोह में यह निर्धारित करने की आवश्यकता:

var selectedIndexPath: NSIndexPath = NSIndexPath() 

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     selectedIndexPath = indexPath 
     return indexPath 
    } 

फिर अंत में आप preparedForSegue समारोह

+0

अच्छा मेरे लिए भी बहुत अच्छा धन्यवाद :) हामिद –

+0

@AadilAli कोई समस्या नहीं :) – Hamid

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