2009-09-22 8 views
6

मेरे पास मेरे ऐप में UITableViewController है, जो सीधे दृश्य पदानुक्रम में जोड़ा गया है। दृश्य प्रकट होने के बाद, मैं एक विशिष्ट सेल पर स्क्रॉल करना चाहता हूं। मेरा समाधान -[viewDidAppear] में स्क्रॉल करने के लिए कोड को कॉल करना होगा।मैन्युअल रूप से viewDidAppear को कॉल करने के लिए सही समय?

एक दृश्य नियंत्रक से संबंधित दृश्य सीधे एक दृश्य के पदानुक्रम में जोड़ा जाता है, तो दृश्य नियंत्रक यह संदेश प्राप्त नहीं होगा:

एप्पल डॉक्स के अनुसार मैं मैन्युअल रूप से विधि कॉल करने के लिए है। यदि आप व्यू पदानुक्रम में कोई दृश्य डालते हैं या जोड़ते हैं, और इसमें एक व्यू कंट्रोलर है, तो आपको सीधे इस संदेश को संबंधित व्यू कंट्रोलर भेजना चाहिए।

सवाल यह है कि इसे मैन्युअल रूप से कॉल करने का सही समय कब होता है?

एक दुर्घटना के जनक दृश्य नियंत्रक के -[viewDidAppear] सुराग से यह कॉलिंग जब मैं और स्क्रॉल करने के लिए क्योंकि जाहिरा तौर पर, तालिका दृश्य वास्तव में अभी तक प्रकट नहीं किया था की कोशिश इसलिए सोचता है कि यह कोई वर्गों के लिए स्क्रॉल करने के लिए है।

उत्तर

1

पेरेंट नियंत्रक के -viewDidAppear से इसे कॉल करना आमतौर पर आपकी सबसे अच्छी शर्त है।

यदि बच्चे के नियंत्रक को पूरी तरह से प्रारंभ नहीं किया गया है, तो यह समस्याएं उत्पन्न हो सकती है, तो आपको एक और समस्या हो सकती है। सुनिश्चित करें कि आपके बच्चे को देखने के लिए नियंत्रक पूरी तरह से "कार्रवाई के लिए तैयार" है के बाद -viewWillAppear कहा जाता है बनाओ (जो आप भी मैन्युअल रूप से कॉल कर सकते हैं माता पिता की -viewWillAppear)

1

में - [viewDidAppear] tableview पर, वास्तव में कहा जाता है अभिभावक दृश्य नियंत्रक से - [viewDidAppear], आप [tableView reloadData] को कॉल कर सकते हैं, इस तरह आप सुनिश्चित करते हैं कि तालिका दृश्य लोड और तैयार है।

0

यह कैसे मैं मैन्युअल viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear कहते हैं: here

और देखने नियंत्रकों में से एक मैं इस तरह से लोड करते हैं, निम्नलिखित viewWillAppear: (ध्यान दें कि यह viewWillAppear मुद्दा यह है कि कम से के बाद से है viewDidAppear कहा जाता है, आपका विचार उपयोगकर्ता द्वारा देखा जा सकता है)

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [wordListTable reloadData]; 
    [wordListTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
} 
-1

जब आप इसे बुलाते हैं तो आपको क्या क्रैश त्रुटि मिलती है? यह संभव हो सकता है कि आप अपना टेबलव्यू सही तरीके से नहीं बनाए रख रहे हैं।

7

यदि आप व्यू कंट्रोलर कंटेंटमेंट का उपयोग कर रहे हैं तो viewWillAppear: पर सीधे कॉल न करें। इसके बजाय – beginAppearanceTransition:animated: और – endAppearanceTransition का उपयोग करें।

आप एक कस्टम कंटेनर नियंत्रक को लागू कर रहे हैं, बच्चे कि अपने विचार को दर्शाने या अदृश्य करने वाले हैं बताने के लिए इस विधि का उपयोग। ViewWillAppear का आह्वान न करें :, viewWillDisappear :, viewDidAppear :, या viewDidDisappear: सीधे।

कॉलिंग addSubView स्वचालित रूप से viewWillAppear: और viewDidAppear: ट्रिगर किया जाएगा यदि दृश्य के ViewController एक बच्चे दृश्य नियंत्रक है, इसलिए बुला viewWillAppear: सीधे दो बार दृश्य इच्छा उपस्थिति विधि ट्रिगर किया जाएगा।StartAppearanceTransition का उपयोग करना: एनिमेटेड: and - एंडएपियरेंस ट्रांसिशन 'स्वचालित व्यवहार को दबाएगा ताकि आप इसे केवल एक बार कॉल कर सकें।

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