2012-01-10 11 views
10

से एकाधिक सेग्स अब मैं आईओएस 5 के लिए 4.2 पर एक्सकोड के साथ शुरू कर रहा हूं और कुछ बदलाव हैं और अब मैं एक समस्या को पार कर रहा हूं जिसे मैं हल करने का कोई तरीका नहीं समझ सकता ।एक्सकोड 4.2 आईओएस 5: UITableView

मैं एक UITablwView के साथ एक उदाहरण कर रहा हूं जो 2 अनुभागों के साथ प्रोग्रामेटिक रूप से पॉप्युलेट किया गया है, केवल 1 पंक्ति वाला पहला खंड और 3 पंक्तियों वाला दूसरा अनुभाग।

मेरा लक्ष्य तालिका से एक पंक्ति का चयन करना है, और उस पंक्ति के आधार पर, उपयोगकर्ता को अलग-अलग दृश्यों पर रीडायरेक्ट किया जाएगा।

उदाहरण के लिए: - नाम सेटिंग // चयन खंड 1 पंक्ति 0, एप्लिकेशन 3 देखने पर धक्का - पता

वर्ष फैशन रास्ता की स्थापना, यह है चयन अनुभाग 0 पंक्ति 0, एप्लिकेशन 1 देखने के लिए धक्का काफी सरल, केवल UIViewController initWithNibName के साथ init करने के लिए आवश्यक है और फिर दृश्य को धक्का दें।

अब कहानी के साथ सबकुछ बदलता है, या कम से कम मुझे लगता है कि यह बदलता है क्योंकि मैं नहीं देख सकता कि एक ही परिणाम कैसे प्राप्त किया जाए क्योंकि मैं तालिका से एकाधिक सेग्यू सेट नहीं कर सकता अलग-अलग UIViewControllers ... और करने के लिए पुराने फैशन तरीके से मैं नहीं देख सकता कि मैं कहानी पर विचारों से एनआईबी नाम कहां प्राप्त कर सकता हूं ताकि एक UIViewController को धक्का दे सके।

क्या कोई जानता है कि इस परिणाम को कैसे प्राप्त किया जाए ??

उत्तर

25

अपने स्रोत दृश्य नियंत्रक से स्टोरीबोर्ड में, "सीगुए 1" और "segue2" के रूप में पहचाने गए दो "जेनेरिक" segues (उदाहरण के लिए) को परिभाषित करें, प्रत्येक गंतव्य दृश्य नियंत्रक में से एक को परिभाषित करें। ये segues किसी भी कार्रवाई से जुड़े नहीं होंगे।

फिर, सशर्त अपने UITableViewDelegate में segues करते हैं:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Conditionally perform segues, here is an example: 
    if (indexPath.row == 0) 
    { 
     [self performSegueWithIdentifier:@"segue1" sender:self]; 
    } 
    else 
    { 
     [self performSegueWithIdentifier:@"segue2" sender:self]; 
    } 
} 
+2

बढ़िया जबाब। मेरे लिए भी काम करता है। जवाब के रूप में स्वीकार किया जाना चाहिए। – mm24

16

मैं एक ही समस्या है के रूप में आप कर सकते हैं। समस्या यह है कि आप अपने तालिका दृश्य दृश्य को कई दृश्य नियंत्रकों से लिंक नहीं कर सकते हैं। हालांकि आप अपने स्रोत दृश्य को कई दृश्य नियंत्रकों के लिए लिंक कर सकते हैं।

  1. दृश्य दर्शक जो कुछ दृश्य नियंत्रक करने के लिए आप लिंक करना चाहते से नियंत्रण खींचें मास्टर दृश्य नियंत्रक (तालिका दृश्य सेल के बजाय)। आप जितना चाहें उतना कर सकते हैं। ध्यान दें कि स्रोत दृश्य नियंत्रक दृश्य में दिखाया गया सीगू "रूट व्यू कंट्रोलर से पुश सेग्यू" जैसा होना चाहिए "बजाय नेविसेल से पुश सेगु ..."।

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        if (indexPath.row % 2 == 1) { 
         [self performSegueWithIdentifier:@"toDetailView1" sender:self]; 
        } else { 
         [self performSegueWithIdentifier:@"toDetailView2" sender:self]; 
        } 
    } 
    
+0

+1 मेरी समस्या हल हो गई –

+0

कमाल! मेरी समस्या हल हो गई! एक प्रश्न ... मैं दो से अधिक सीगों के लिए एक ही चीज़ का उपयोग कैसे कर सकता हूं। मान लें कि मेरे पास 7 टेबल व्यू सेल हैं। आपके द्वारा प्रदान किए गए कोड के अतिरिक्त मैं इसका उपयोग कैसे करूं? –

0

जैसा @ 陳仁 乾 और @Marco समझाया था:

  • "toDetailView1"

  • अंत में, कस्टम अपने स्रोत दृश्य नियंत्रकों में चयन की तरह प्रत्येक segue लिंक का एक अलग नाम को पहचानें पूरी तरह से सही है। सबकुछ थोड़ा आसान बनाने के लिए मैं आपको एक NSArray का उपयोग करने की सलाह दूंगा जो viewDidLoad पर प्रारंभ किया जाएगा।बस segues इस तरह से तुम क्या आप में से चुन सकते UIViewControllers का सही विवरण प्रदर्शित कर सकते हैं अपने UIViewControllers रूप में एक ही नाम दें, और आप भी इस NSArray से segues प्रदर्शन कर सकते हैं:

    (वास्तव में मुझे यकीन है कि अगर यह कर सकते हैं नहीं कर रहा हूँ segue बुला UIViewController आप कॉल करना चाहते रूप में एक ही किसी भी समस्या पैदा हो। कृपया अगर यह है BadPractise मुझे पता है)

    viewDidLoad

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        _arraySessions = [[NSArray alloc] initWithObjects: 
             @"MyViewControllerName", nil]; 
    } 
    
    जाने

    cellForRowAtIndexPath

    - (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
        UITableViewCell *cell = 
        [tableView dequeueReusableCellWithIdentifier:@"overviewCell" 
                forIndexPath:indexPath]; 
    
        [cell.textLabel setText:_arraySessions[indexPath.row]]; 
    
        return cell; 
    } 
    

    didSelectRowAtIndexPath

    - (void)tableView:(UITableView *)tableView 
         didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
        [self performSegueWithIdentifier:_arraySessions[indexPath.row] 
               sender:self]; 
    }