2013-03-07 9 views
5

मैं अपने अनुप्रयोग में एक अजीब बग में आए शुरू हो रहा:।UITableView धक्का segue कई बार

सेटअप

एक साधारण मास्टर-विस्तार से एप्लिकेशन, iPhone शैली (यानी कोई विभाजन देखने के लिए, कोई पॉपओवर, बस एक नेविगेशन नियंत्रक, एक टेबल व्यू नियंत्रक, और एक दृश्य नियंत्रक)।

enter image description here

बग

  1. टच एक अनुभाग शीर्ष लेख या पाद लेख की तरह तालिका दृश्य (मेरे स्क्रीनशॉट पर गहरे भूरे भागों) का एक "पृष्ठभूमि" भाग।
  2. अपनी अंगुली को स्क्रीन पर रखते हुए, एक सेल को कई बार स्पर्श करें।
  3. सभी उंगलियों को छोड़ दें। "विस्तार" दृश्य इच्छा सामान्य रूप से धक्का दे दिया, लेकिन जब वापस बटन को छू, तो आप पाएंगे कि विवरण दृश्य के रूप में आप कदम पर सेल छुआ कई बार के रूप खड़ी की गई थी 2.

enter image description here

आप कर सकते हैं भी चरण 2 में कई कक्षों को छूने और अपने गंतव्य विचारों को सही क्रम :)

यह पुन

मैं एक साफ, ताजा बनाया अनुप्रयोग के साथ बग पुन: पेश करने में सक्षम था में एकत्र हो जाएंगे, और टी पर वह आईफोन के लिए ट्विटर ऐप की आखिरी रिलीज (उंगली # 1 के साथ "लोडिंग" लेबल को छूकर और कई बार एक ट्वीट को छूकर)।

हालांकि, मैं "सामान्य" टैब (जो समूहबद्ध तालिका दृश्य है) के तहत सेटिंग ऐप में वही व्यवहार ट्रिगर नहीं कर सका।

बग आईओएस 6.0 और 6.1 पर पुन: उत्पन्न किया गया था। मेरे पास पुराने संस्करणों के साथ परीक्षण करने के लिए डिवाइस नहीं हैं।

प्रश्न

जब नेविगेशन/तालिका दृश्य आधारित ऐप्स बनाने के इस एक ज्ञात चाल है और यदि ऐसा है तो इस (अजीब) व्यवहार को रोकने के लिए एक समाधान है? या यह एक आईओएस बग है (और यदि हां, तो क्या यह ऐप्पल से पहले ही ज्ञात है)?

+0

मैं अपने आवेदन में इस बग को पुन: पेश नहीं कर सका - जैसे ही एक सेल चुना जाता है, एक सीगू धक्का दिया जाता है: मैं आपके जैसे कई सेल्स का चयन नहीं कर सकता - इसलिए यह आपके एप्लिकेशन (या अन्य) के विशिष्ट तरीके से संबंधित हो सकता है) segue पुश संभाल लें। एक प्रश्न: आपकी टेबल और निम्नलिखित दृश्य नियंत्रक के बीच आपके स्टोरीबोर्ड पर आपके पास 3 सीग क्यों हैं? एक होना चाहिए – Vinzzz

+0

यह केवल एकाधिक कोशिकाओं पर segue परीक्षण करने की अनुमति देने के लिए था। तालिका दृश्य में स्थिर कोशिकाएं होती हैं और मैंने प्रत्येक सेल के लिए एक सेगू बनाया है। मेरा "वास्तविक" ऐप हालांकि गतिशील कोशिकाओं का उपयोग करता है, केवल एक सेग्यू (अगले नियंत्रक पर ctrl + ड्रैग के साथ बनाया गया है, सुंदर क्लासिक)। मैंने अभी इस सवाल में जोड़ा है कि मैंने केवल आईओएस 6.x पर परीक्षण किया है। क्या आप पहले के संस्करण पर परीक्षण कर रहे हैं? –

+0

और आपके पास इस सेग्यू को 'कस्टम' के रूप में सेट करते समय भी यह बग है, और प्रोग्रामिंग रूप से चीजें कर रहा है: अपने टेबल प्रतिनिधि से 'performSegueWithIdentifier' को कॉल करना' didSelectCellAtIndexPath: '? इस तरह से मैं इसे संभालता हूं, मैं कई सेल्स का चयन नहीं कर सकता (आईओएस 6) – Vinzzz

उत्तर

0

यह आईओएस 7.

में एप्पल द्वारा तय हो गई है OS के पिछले संस्करणों के लिए, Dan F's answer चाल करना चाहिए।

3

एक संभावित कामचलाऊ उपाय आप इस्तेमाल कर सकते हैं

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

लागू करने के लिए और संकेत मिलता है कि आप वर्तमान में है कि segue निष्पादित करने के लिए कोशिश कर रहे हैं एक बूलियन ध्वज या कुछ का उपयोग करें। पूर्व:

BOOL doingSegue = NO; 

-(void) viewWillAppear 
{ 

    doingSegue = NO; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 

    if ([identifier isEqualToString:@"MySegueIdentifier"]) 
    { 
     if (doingSegue) 
     { 
      return NO; 
     } 
     else 
     { 
      doingSegue = YES; 
      return YES; 
     } 
    } 
    return YES; 
} 

स्विफ्ट संस्करण

var doingSegue = false 

override func viewWillAppear(_ animated: Bool) { 
    doingSegue = false 
} 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "MySegueIdentifier" { 
     if doingSegue { 
      return false 
     } 
     else { 
      doingSegue = true 
      return true 
     } 
    } 
    return true 
} 
संबंधित मुद्दे