2013-11-27 10 views
7

मेरे पास तालिका के अलग-अलग प्रकार के टेबल दृश्य कक्षों के साथ एक टेबल दृश्य है। कोशिकाओं में से एक में, दो बटन होते हैं, जो दबाए जाने पर दृश्य नियंत्रक लोड करते हैं। मैं बटन प्रेस को संभालने के लिए निम्न फ़ंक्शन का उपयोग कर रहा हूं:आईओएस segue दो बार निष्पादित

- (IBAction)leftButtonPressed:(id)sender 
{ 
    // Getting the pressed button 
    UIButton *button = (UIButton*)sender; 
    // Getting the indexpath 
    NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0]; 
    // Loading the proper data from my datasource 
    NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row]; 
    [[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]]; 
    // Everything working as it should up to this point 
    // Performing seque... 
    [self performSegueWithIdentifier:@"buttonSegue" sender:self]; 
} 

मेरा बटनसेग्यू एक नया दृश्य नियंत्रक धक्का देना है। बजाय एक बार धक्का की किसी भी तरह, यह दो बार जोर दे रहा प्रतीत होता है, तो मैं निम्न चेतावनी मिलती है:

2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar 
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 

मेरे मामले में यह एक दुर्घटना की ओर जाता है के बाद से वहाँ एक घटना जिसमें मैं एप्लिकेशन तुरंत पॉप करना चाहते हैं व्यू कंट्रोलर ताकि यह मेरे टेबल व्यू पर वापस जा सके। मैं इस के लिए एक alertview का उपयोग करें और निम्नलिखित के साथ घटना को संभाल:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
    // ... 
    // Additional checking of button titles.... 
    else if ([buttonTitle isEqualToString:NSLocalizedString(@"Vissza", nil)]) 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

यह मेरे नोट करने के लिए दिलचस्प हो सकता है कि मैं अपने "नियमित" तालिका दृश्य सेल से एक अन्य segue है, और उस मामले में मैं prepareForSegue का उपयोग : विधि

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"detailSegue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     SOEvent *selectedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indexPath.row]; 
     [[SOEventManager sharedEventManager] setSelectedEvent:selectedEvent]; 
    } 
} 

इस मामले में दृश्य नियंत्रक पूरी तरह से धक्का दिया जाता है, और यदि आवश्यक हो तो भी तुरंत पॉप किया जाता है। मैं आईओएस 7 और एक्सकोड 5 पर इसका परीक्षण कर रहा हूं। मुझे पहले इस तरह की कोई समस्या नहीं आई है, किसी भी मदद की सराहना की जाएगी।

+5

क्या आप वाकई इंटरफ़ेस बिल्डर में कार्यों को सही तरीके से तारित कर चुके हैं? हो सकता है कि आपने ईवेंट को वायर्ड किया है, कहें, दोनों अंदर छूएं और अंदर छूने के बजाय अंदर छूएं। या हो सकता है कि आपने इंटरफ़ेस बिल्डर में दोनों कोड से और फिर से segue असाइन किया हो। क्या आपने उन्हें चेक किया है? यह एक आम गलती है। –

+0

अरे अरे .. आप वास्तव में सही हैं, मैं टेबल बटन डेटासेट विधियों में भी अपने बटन असाइन करता हूं .. आपके उत्तर के लिए धन्यवाद! –

उत्तर

16

द्वारा उत्तर poyrazoğlu कर सकते हैं:

क्या आप वाकई सही ढंग से इंटरफ़ेस बिल्डर में कार्रवाई ऊपर तार किया है कर रहे हैं? शायद आपने के अंदर छूने के लिए ईवेंट को वार्ड किया है और अंदर छूने के बजाय अंदर स्पर्श करें। या हो सकता है कि आपके पास ने इंटरफ़ेस बिल्डर में दोनों कोड से फिर से सेग्यू असाइन किया हो। क्या आपने उन्हें चेक किया है? यह एक आम गलती है। -

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

आपकी त्वरित सहायता के लिए धन्यवाद poyrazoğlu कर सकते हैं !!

+0

ओह, मैंने वास्तव में टेबल व्यू के बारे में नहीं सोचा था, लेकिन इसे देखने में खुशी हुई। आपका स्वागत है :) –

+0

मैं नया दृश्य नियंत्रक 2x भी लोड कर रहा था। मैंने टेबलव्यू सेल के बजाय व्यू कंट्रोलर से सेग्यू को जोड़ा और इससे समस्या हल हो गई। – JeffK

12

शायद आप UIButtons के बजाय व्यू कंट्रोलर के साथ अपने segues को तार करना चाहते हैं!

आप शायद segues इस तरह की कुछ बटन के साथ वायर्ड किया जाना चाहिए था: enter image description here

लेकिन आप इसके बजाय दृश्य नियंत्रकों के साथ उन्हें तार चाहिए: enter image description here

+0

यह मेरे लिए काम किया! (स्विफ्ट 4, एक्सकोड 9)। यकीन नहीं है कि इस पर अधिक जोर क्यों नहीं दिया जाता है! एक प्रतिनिधि का उपयोग करना, यदि एक बटन (एक टेबल सेल में) के बीच सेग्यू वायर्ड किया गया था, तो यह हमेशा आग लग जाएगा, और मेरे प्रतिनिधि को बाद में निष्पादित किया जाएगा। सेल दृश्य के लिए वायर्ड, ऐसा नहीं होता है, इसलिए मेरी मैन्युअल कॉल योजनाबद्ध रूप से segue काम करने के लिए कहते हैं। – DavidG

1

मैं हमेशा इस मुद्दे को मिल रहा है जब मेरे बटन सीधे गंतव्य दृश्य नियंत्रक के लिए तारित। आपको यह सुनिश्चित करने की ज़रूरत है कि आप पहले बनाए गए पुराने सेग्यू को हटा दें, फिर वर्तमान दृश्य नियंत्रक (जहां से आप आ रहे हैं) पर क्लिक करें और CTRL + गंतव्य नियंत्रक पर क्लिक करें।

यह इसे ठीक करना चाहिए :)

5

स्विफ्ट 3, xcode, और iOS 9+, जो मैं क्या उपयोग कर रहा हूँ है: सुनिश्चित करें कि आप अपने UIViewControllers और नहीं बटन या अन्य इंटरफेस से segue ड्राइंग कर रहे हैं।

मुझे एक ही समस्या थी, और बस बटन के बजाए यूआईसींट्रोलर से सेग्यू की शुरुआत को बदलकर इस बग को हटा दिया गया।

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