2013-09-07 10 views
11

मैं आईओएस ऐप डेवलपमेंट में नया हूं। मैंने एक टेबलव्यू नियंत्रक को जोड़ा है जैसे कि जब मैं पंक्तियों में से एक का चयन करता हूं तो मुझे didSelectRowAtIndexPath का उपयोग करके एक और UIViewController मिलता है। मेरे पास इस UIViewController के अंदर एक कंटेनर व्यू है जो पंक्ति के सूचकांक (समय के लिए कहता है) प्रदर्शित करता है जिस पर किया गया चयन करेंटएंड इंडेक्सपैथ कहा जाता था। मैं इसे एक सेग्यू का उपयोग करके करना चाहता हूं, लेकिन समस्या यह है कि मुझे नहीं पता कि व्यू कंट्रोलर का संदर्भ कैसे प्राप्त किया जाए, जिसे कंटेनर व्यू का उपयोग करके बनाया गया है। मुझे पता है कि आप guarantForSegue में segue.destinationViewController का उपयोग कर गंतव्य देखें नियंत्रक प्राप्त कर सकते हैं लेकिन कंटेनर दृश्य के कारण लोड होने वाले नियंत्रक को देखने के लिए मुझे संदर्भ कैसे प्राप्त होगा। मैं आईओएस 6 के लिए ऐप का निर्माण कर रहा हूं। इसके अलावा मैंने यूआई के लिए स्टोरीबोर्ड का इस्तेमाल किया है। धन्यवादकंटेनर व्यू के दृश्य को संदर्भित करना

संपादित करें:

यह सवाल मूल रूप से कैसे UIViewController -2 जाता है कि UIContainerView जो UIViewController -1 के अंदर है द्वारा बताया जा रहा के लिए एक संदर्भ पाने के लिए करने के लिए नीचे आता है। UIViewController -1 UITableViewController की एक पंक्ति का चयन करके शुरू हो रहा है

UITableViewController (एक पंक्ति देने के लिए चुन कर) ---> UIViewController -1 जिसमें .... ContainerView ---> UIViewController -2 (ViewController ContainerView के साथ जुड़े)।

+0

ऐसा देख सकें कि आपको यहां एक उत्तर मिला है: http://stackoverflow.com/a/ 18673394/1187415। मुझे आश्चर्य है कि क्या वही है जो @ मुंडी ने नीचे कहा था। –

+0

एक ही प्रश्न दो बार पोस्ट न करें। मैं इस थ्रेड को डुप्लिकेट के रूप में बंद करने का लुत्फ उठा रहा हूं। –

+1

@ डुनकनसी मैं दूसरे को बंद करने के इच्छुक हूं, क्योंकि यह इस का डुप्लिकेट है। यह पहला था (और अधिक स्पष्ट है)। – Rob

उत्तर

26

ठीक है, चलो इस परिदृश्य की कल्पना करते हैं:

storyboard

और मान लेते हैं आप सेल आप मेज पर उपयोग किया समर्थन मॉडल डेटा के साथ कि "दूसरे दृश्य नियंत्रक के बच्चे" पर लेबल को अद्यतन करना चाहते हैं राय।

आप क्या कर सकते है:

  1. एक अद्वितीय पहचानकर्ता (जैसे Detail), कि दूसरे दृश्य नियंत्रक में एक संपत्ति को परिभाषित मूल्य प्राप्त करने के लिए एक दूसरे के लिए पहला दृश्य से segue दें पारित किया जा रहा इसके लिए (उदाहरण के लिए someStringValue), और prepareForSegue लिखें जो मान को पास करता है, उदाहरण के लिए:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        if ([segue.identifier isEqualToString:@"Detail"]) 
        { 
         NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
         [segue.destinationViewController setSomeStringValue:self.objects[indexPath.row]]; 
        } 
    } 
    
  2. दोहराएँ अपने एम्बेड segue के लिए इस प्रक्रिया, अर्थात्, अपने एम्बेड दृश्य नियंत्रक मूल्य प्राप्त करने के लिए देने के लिए अपने स्वयं के अद्वितीय पहचानकर्ता segue (जैसे Embed) और कहा कि "दूसरे दृश्य नियंत्रक के बच्चे" में एक संपत्ति बनाने यह (जैसे someStringValue) को पारित कर दिया है, और एक prepareForSegue दूसरे दृश्य नियंत्रक में है कि अपने बच्चे को देखने के नियंत्रक के साथ मूल्य पारित करेंगे, जैसे है:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        if ([segue.identifier isEqualToString:@"Embed"]) 
        { 
         [segue.destinationViewController setSomeStringValue:self.someStringValue]; 
        } 
    } 
    
+0

क्यों साफ़ करता है, लेकिन क्या होगा अगर रोकथाम प्रोग्रामेटिक रूप से – Mrug

+0

@Mrug किया जाता है तो दृष्टिकोण 'वही तैयार करें' में बच्चे की संपत्ति को सेट करने के बजाय, वही है, आप कोड में ऐसा करेंगे जहां आप प्रोग्रामेटिक रूप से तत्काल प्रारंभ करेंगे बच्चे और 'addChildViewController' पर कॉल करें। – Rob

1

आप prepareForSegue के बारे में सही हैं। destinationViewController आपको गंतव्य दृश्य नियंत्रक देगा।

मुझे नहीं पता कि आपको और कुछ क्यों चाहिए। यदि आप गंतव्य नियंत्रक को एक और नियंत्रक (क्यों?) रखना चाहते हैं, तो आप गंतव्य नियंत्रक को @property दे सकते हैं जो उस नियंत्रक को इंगित करता है, और आप इस प्रॉपर्टी को पढ़ और सेट कर सकते हैं।

लेकिन सवाल बनी हुई है - आप ऐसा क्यों करना चाहेंगे?

+0

मैं एक और दृश्य प्रदर्शित करने के लिए कंटेनर का उपयोग कर रहा हूँ। यह दृश्य वास्तव में नेविगेशन बार के रूप में कार्य कर रहा है क्योंकि डिफ़ॉल्ट नेविगेशन बार में टिंट प्रभाव होता है (जिसे मुझे पसंद नहीं है)। मैंने जो सवाल पूछा वह एक शीर्षक स्थापित करने के बारे में है (जो नए दृश्य में एक लेबल होगा)। उम्मीद है कि यह – Roadblock

-1

सेल पुन: उपयोग पहचानकर्ता घोषित करना और इस विधि का उपयोग करें।

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if([segue.identifier isEqualToString:@"nameOfSegue"]) 
     { 

      } 


    } 

यात्रा अधिक संदर्भ

Here

0

के लिए नीचे दिए गए लिंक यदि सब आप कर रहे हैं तो एक नकली नेविगेशन पट्टी पैदा कर रही है एक कंटेनर को देखने और एक बच्चे को देखने के लिए नियंत्रक का उपयोग बेकार में जटिल और स्मृति है गहन। बस कंट्रोलर 1 में दृश्य के रूप में अपनी नकली नेविगेशन बार बनाएं, इसे एक लेबल दें जिसमें आपका शीर्षक है, लेबल को आउटलेट के रूप में हुक करें, और लेबल को वांछित के रूप में सेट करें। बहुत, बहुत साफ और सरल।

4

के रूप में अन्य के ने कहा है एक ओवरराइड कर सकते हैं जब एम्बेडेड segue यानी होता

-(void)viewDidLoad { 
    for (UIViewController* vc in self.childViewControllers) { 
      if ([vc isKindOfClass:MyChildController.class]) { 
       // do something here 
      } 
    } 
} 

सुझाव नहीं आप यह कर, लेकिन यदि आप स्टोरीबोर्ड के साथ काम कर रहे हैं के रूप में आप एक समय के अलावा अन्य में उपयोग कर सकते हैं कि व्यक्तिगत रूप से मैं UIViewController.childControllers उपयोग करने को प्राथमिकता - prepareForSegue बच्चे दृश्य नियंत्रक का पता लगाने की बच्चे नियंत्रक सरणी का क्रम बिल्कुल इंटरफ़ेस बिल्डर में ऑर्डर जैसा है ताकि आप सीधे बच्चे दृश्य नियंत्रक [0], [1]

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