स्टोरीबोर्ड Xcode में अनुकूली सेग्यू 6. पुश अप्रेक्टेड है?


121

डिफ़ॉल्ट रूप से Xcode 6 इंटरफ़ेस बिल्डर में नए चेकबॉक्स "उपयोग आकार वर्ग" हैं। यह विचारों को अनुकूल बनाता है। यहाँ छवि विवरण दर्ज करें

जब मैं अपने स्टोरीबोर्ड में 2 दृश्यों के बीच बहस करने की कोशिश करता हूं तो मेरे पास नए विकल्प होते हैं: यहाँ छवि विवरण दर्ज करें

पुराने के बजाय:

यहाँ छवि विवरण दर्ज करें

अब हमारे पास "पुश" और "मोडल" के बजाय "शो" और "वर्तमान में" हैं। पुराने विकल्पों को पदावनत के रूप में चिह्नित किया गया है। मैंने "शो" विकल्प चुना है, क्योंकि सेग सेटिंग्स में इसे "शो (जैसे पुश) कहा जाता है

यहाँ छवि विवरण दर्ज करें

लेकिन यह धक्का नहीं करता है। सेग एनीमेशन नीचे से स्लाइड की तरह दिखता है (मोडल) और नेविगेशन बार गायब हो जाता है।

प्रश्न यह है कि मैं पुश की तरह "शो" कैसे बना सकता हूं? क्या यह संभव है या क्या मुझे इसके बजाय "पुश (पदावनत)" का उपयोग करना चाहिए? मुझे नए प्रकार के सेग के बारे में कोई जानकारी कहां मिल सकती है? केवल एक चीज जो मैंने iOS8 डेवलपर लाइब्रेरी में पाई है वह है स्टोरीबोर्ड हेल्प यू डिजाइन योर यूजर इंटरफेस लेकिन "शो" सेगमेंट के बारे में कोई जानकारी नहीं है।

अपडेट करें

मैंने नई परियोजना बनाने की कोशिश की और "शो" वास्तव में "पुश" की तरह काम करता है। मुझे लगता है कि मेरी परियोजना में समस्या हो सकती है क्योंकि मैं इस तरह के कोड के साथ नेविगेशन नियंत्रक का पुन: उपयोग करता हूं, लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
    SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
    
    swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
        
        UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
        [navController setViewControllers: @[dvc] animated: NO ];
        [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
    };
    
}

उसके बाद मैं MainViewController के बाद NewViewController को पुश करने की कोशिश करता हूं यहाँ छवि विवरण दर्ज करें

अद्यतन 2:

मुझे केवल iOS 7, iOS 7.1 इश्यू लगता है।

जवाबों:


97

हां, 'पुश' के बजाय 'शो' का उपयोग करें

मैं "शो" को पुश की तरह कैसे काम कर सकता हूं? क्या यह संभव है या क्या मुझे इसके बजाय "पुश (विकृत)" का उपयोग करना चाहिए?

यह होना चाहिए; यह मेरे लिए करता है। मैं Xcode 6 बीटा 2 का उपयोग कर रहा हूं और परीक्षण करने के लिए मैंने सिंगल व्यू टेम्प्लेट का उपयोग किया है (IB 'VC_A' में प्री मेड व्यू कंट्रोलर को कॉल करके)। मैंने फिर एक और व्यू कंट्रोलर ('VC_B') जोड़ा। मैंने तब VC_A पर एक बटन जोड़ा VC VCA और दूसरा VC_B वापस VC_A दिखाने के लिए। जब मैं स्टोरीबोर्ड में प्रारंभिक दृश्य नियंत्रक के रूप में एक नेविगेशन नियंत्रक जोड़ता हूं और VC_A को rootViewController बनाते हैं, तो 'पुश' और 'शो' दोनों का समान प्रभाव पड़ता है। अगर मेरे पास शुरुआती नेविगेशन कंट्रोलर नहीं है और मैं 'शो' का उपयोग करता हूं तो मुझे वही मिलता है जो आप में वर्णित है। VC_B नीचे से स्लाइड करता है। अगर मैं 'पुश' करने की कोशिश करता हूं तो मुझे एक क्रैश मिलता है क्योंकि पुश करने के लिए मेरे पास नेविगेशन कंट्रोलर होना चाहिए।

मुझे नए प्रकार के बहस के बारे में कोई जानकारी कहां मिल सकती है?

इसलिए मैं में कुछ जानकारी मिल गया 'क्या इंटरफ़ेस बिल्डर में नया क्या है' सत्र यहाँ । यदि आप स्लाइड्स को देखते हैं तो आपको एक स्लाइड (41) में परिवर्तन का उल्लेख होगा। उस सत्र के वीडियो को देखने पर आप 38:00 मिनट छोड़ सकते हैं जहां वे अनुकूली बहस के बारे में बात करना शुरू करते हैं। वे बताते हैं कि 'शो' एडेप्टिव सेगमेंट, उदाहरण के लिए, नए व्यू कंट्रोलर की प्रस्तुति को कैसे करें, यह तय करते समय संदर्भ लेता है।


आपके उत्तर के लिए धन्यवाद। मैंने नया प्रोजेक्ट बनाने की कोशिश की और "शो" वास्तव में नेविगेशन कंट्रोलर के साथ पुश की तरह काम करता है। अपने प्रोजेक्ट में मैंने इस पाठ से साइडबार के साथ जटिल संरचना की है appcoda.com/ios-programming-sidebar-navigation-menu और पुश वर्क्स, शो नहीं। हो सकता है कि मैं नेविगेशन नियंत्रक का पुन: उपयोग करता हूं। मैंने पुन: उपयोग कोड के साथ अपना प्रश्न अपडेट किया है।
जॉन काकॉन

इसलिए पहली बात जो मैं आपके अपडेट को देखते हुए देख रहा हूं कि आप कस्टम सेगमेंट की उम्मीद कर रहे हैं: 'SWRevealViewControllerSegue' तो हाँ यह संभवत: उन मामलों में आपके मामले में 'शो' या 'पुश' का उपयोग करने का कोई मतलब नहीं है, जो इसमें निर्मित हैं। जब आप अपना स्वयं का कस्टम कोड चलाना चाहते हैं, तो seगुज। जब मैं नमूना परियोजना डाउनलोड करता हूं, तो यह स्टोरीबोर्ड फ़ाइल में सेगमेंट पर 'कस्टम' के चयन को भी दर्शाता है।
स्पेंसर हॉल

मेरा मतलब इस सेगमेंट से नहीं था। मैं "MainViewController" के बगल में नया UIViewController बनाने के बारे में बात कर रहा था (इसमें नेविगेशन नियंत्रक है, और मेरा "अपडेट" केवल दिखाता है कि मैं वहां कैसे पहुंचता हूं) और MainViewController में नए दृश्य को पुश करने का प्रयास करता हूं। स्टोरीबोर्ड स्क्रीनशॉट मैं आभारी रहूंगा यदि आप नमूना परियोजना में "आकार वर्गों का उपयोग करते हैं", NewViewController बनाएं और "शो" द्वारा MainViewController और NewViewController के बीच बहस करने का प्रयास करें। आप देखेंगे कि मैं किस बारे में बात कर रहा हूं।
जॉन काकॉन

क्या अभी और कम से कम मेरे लिए "शो" सिर्फ "पुश" की तरह संचालित है।
स्पेन्सर हॉल

9
आप बग के चारों ओर यह सुनिश्चित करके काम कर सकते हैं कि आपके व्यू कंट्रोलर के सभी तरीके उनके रूट पर UINavigationController हैं। भले ही इसका मतलब है कि आपके स्टोरीबोर्ड में एक UINavigationController डालना जो कभी एक्सेस नहीं किया जाएगा। ऐसा लग रहा है कि वायरिंग का उपयोग व्यवहार का पता लगाने के लिए किया जाता है।
स्कॉट रॉबर्टसन

33

पहले से ही एक स्वीकृत उत्तर है, लेकिन मैं थोड़ी और जानकारी देना चाहता था, संभवतः ऐसी जानकारी जो पहले उपलब्ध नहीं थी।

जैसा कि पहले उल्लेख किया गया था, "पुश" और "मोडल" सेगमेंट को हटा दिया गया था, और क्रमशः "शो" और "वर्तमान में" द्वारा प्रतिस्थापित किया गया है। Apple के प्रलेखन के अनुसार, नए सेगमेंट को उन सेगमेंट में विभाजित किया गया है जो आकार वर्गों के अनुकूल हैं। पुराने का उपयोग केवल iOS 8 से पुराने iOS संस्करणों का समर्थन करने के लिए किया जाना चाहिए।

निम्नलिखित लिंक में दस्तावेज़ बताते हैं कि और सभी उपलब्ध सेगमेंट का वर्णन, पुराना और नया।

एक स्टोरीबोर्ड में दृश्यों के बीच एक बहस जोड़ना

यदि भविष्य में URL बदलता है, तो यह प्रत्येक नए सेगमेंट के लिए दिया गया स्पष्टीकरण है:

प्रदर्शन

स्क्रीन की सामग्री के आधार पर विस्तार या मास्टर क्षेत्र में सामग्री प्रस्तुत करें। यदि एप्लिकेशन एक मास्टर और विवरण दृश्य प्रदर्शित कर रहा है, तो सामग्री को विस्तार क्षेत्र पर धकेल दिया जाता है। यदि एप्लिकेशन केवल मास्टर या विवरण प्रदर्शित कर रहा है, तो सामग्री को वर्तमान दृश्य नियंत्रक स्टैक के शीर्ष पर धकेल दिया जाता है।

विवरण दिखाएँ

सामग्री को विस्तार क्षेत्र में प्रस्तुत करें। यदि एप्लिकेशन एक मास्टर और विवरण दृश्य प्रदर्शित कर रहा है, तो नई सामग्री वर्तमान विवरण को बदल देती है। यदि एप्लिकेशन केवल मास्टर या विवरण प्रदर्शित कर रहा है, तो सामग्री वर्तमान दृश्य नियंत्रक स्टैक के शीर्ष को बदल देती है।

सामान्य रूप से प्रस्तुत करें

सामग्री को मामूली रूप से प्रस्तुत करें। एक प्रस्तुति शैली (UIModalPresentationStyle) और एक संक्रमण शैली (UIModalTransitionStyle) चुनने के विकल्प हैं।

पॉपओवर के रूप में प्रस्तुत करें

एक मौजूदा दृश्य के लिए लंगर के रूप में सामग्री को प्रस्तुत करें। पॉपओवर व्यू (UIPopoverArrowDirector) के एक किनारे पर दिखाए गए तीर की संभावित दिशाओं को निर्दिष्ट करने का विकल्प है। लंगर दृश्य को निर्दिष्ट करने का एक विकल्प भी है।


24

tldr; उस सेग को हटा दें जो सही तरीके से नहीं चल रहा है और स्टोरीबोर्ड में एक UIView / UIControl से लक्ष्य दृश्य नियंत्रक तक खींचकर इसे फिर से बनाना है।

अन्य उत्तरों में कुछ भी गलत नहीं है, लेकिन यह बताता है कि क्या हो रहा है, आप कैसे सत्यापित कर सकते हैं कि यह हो रहा है और भविष्य में समस्या को कैसे कम किया जाए।

पृष्ठभूमि

मेरे मामले में, मेरा कोई भी शो सेगमेंट तब भी काम नहीं कर रहा था, जबकि मेरे पास पहले से ही मेरे प्रारंभिक व्यू कंट्रोलर के रूप में एक UINavigationController था (रूट के रूप में मेरी सामग्री UIViewController के साथ)।

क्यों और कैसे शो तोड़ता है

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

<connections>
    <segue destination="85t-Z1-hxf" kind="show" identifier="ToOptions" action="showDetailViewController:sender:" id="gdZ-IX-KcN">
</connections>

नोटा xml के रूप में स्टोरीबोर्ड देखने के लिए; स्टोरीबोर्ड फ़ाइल पर राइट क्लिक करें और Open as> Source Code चुनें । ओपन को> इंटरफेस बिल्डर - स्टोरीबोर्ड के रूप में उपयोग करने के लिए

स्टोरीबोर्ड से सेग का उपयोग करते समय किसी भी कस्टम क्रियाओं को समायोजित करने के लिए, केवल एक तैयारफॉरग्यूग में टैप कर सकते हैं और गंतव्य दृश्य नियंत्रक को रोक सकते हैं और उस स्थान से किसी भी तरीके को कॉल कर सकते हैं। किसी भी मामले में, इस छोटी बग के लिए साइड इफेक्ट (बग यह तथ्य है कि जब आप सेग को फिर से परिभाषित करते हैं तो इसे ठीक से xml में सेट नहीं किया जाता है। यानी आपके द्वारा एक यूआईवाईवाई से संचालित होने वाले सेग को बदलने के बाद भी कार्रवाई बनी रहती है (या) UIControl) एक लक्ष्य दृश्य नियंत्रक के लिए)।

दुर्भाग्य से सबसे सीधा समाधान विफल हो जाता है। तो स्टोरीबोर्ड के भीतर से कार्रवाई के लिए सिर्फ xml विशेषता को हटाने से समस्या ठीक नहीं होगी । इसके बजाय किसी को केवल सेगमेंट को हटाना और फिर से बनाना है स्टोरीबोर्ड में को ।

जब स्टोरीबोर्ड एक्सएमएल को फिर से बनाया जाता है, तो विशेष रूप से सेगमेंट से जुड़ी कोई कार्रवाई नहीं होगी और शो पुश के रूप में निष्पादित होगा।

सही शो सेगमेंट के लिए नमूना Xml

  <connections>
    <segue destination="RbV-Au-WV9" kind="show" identifier="ToOptions" id="5dm-os-bcS"/>
  </connections>

शमन

यदि कोई संभव हो तो पुनरावृत्ति को रोकने के लिए गंतव्य व्यू नियंत्रक के आधार पर आवश्यक क्रियाओं को जोड़ने के लिए तैयारफॉरग्यूग का उपयोग करके गैर-मैनुअल स्टोरीबोर्ड सेग से चिपकना चाहिए। या यदि आपको मिक्स एंड मैच करना है, तो यह सुनिश्चित करने के लिए सावधानी बरतें कि आपके शो सेगमेंट में स्टोरीबोर्ड एमएलएम में कोई क्रिया नहीं जुड़ी हुई है। यदि आप पुरानी परियोजनाओं से निपट रहे हैं तो आपको स्टोरीबोर्ड स्रोत कोड पर विशेष ध्यान देना चाहिए क्योंकि मैंने कुछ मुद्दों की खोज की है।


3
घंटों के बाद, इसने शायद मुझे कुछ और घंटे बचाए। यहाँ, मैं उपरोक्त के आधार पर क्या सुझाव दूंगा: स्रोत कोड के रूप में स्टोरीबोर्ड खोलें , दयालु = "शो" के लिए खोज करें और देखें कि क्या लाइन में एक्शन जैसा कुछ है = "showDailViewController: प्रेषक:" , यदि हां, तो कार्रवाई के लिए सब कुछ हटा दें = बंद होने तक " । मेरे पास एक वास्तविक विशाल स्टोरीबोर्ड है और प्रभावित seque में यह क्रिया पैरामीटर नहीं है, लेकिन एक और असूचीबद्ध रेखा ने किया। एक बार जब मैंने कार्रवाई को हटा दिया, तो सभी अनुकूली अनुक्रमों ने फिर से उम्मीद के मुताबिक काम किया। बस प्रभावित seque didn को हटा दिया। t काम।
मार्कस

इसने मुझे भी बचाया।
एडम बर्डन

1
XML में एक्शन विशेषता को हटाना मेरे दोस्त के लिए काम आया।
ब्रेंट रॉयल-गॉर्डन

मुझे भी बचाया
जिमी जॉर्ज थॉमस

Xml फ़ाइल में कार्रवाई विशेषता हटा दी गई, और वोइला, यह काम करता है। इस पोस्ट के बिना मुद्दा कभी नहीं मिला होगा।
krizzzn

20

जैसा कि स्कॉट रॉबर्टसन ने यहां टिप्पणी की है , यह आईओएस 7 में एक बग जैसा दिखता है।

ऐसा प्रतीत होता है कि आईओएस 8 में संक्रमण रनटाइम (सही व्यवहार) में अनुमानित है, जबकि आईओएस 7 में संक्रमण डिजाइन समय (छोटी गाड़ी का व्यवहार) में अनुमानित है।

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

नोट: इन उद्देश्यों के लिए नेविगेशन बार का अनुकरण पर्याप्त नहीं है; आपको वास्तव में इसके पुश स्टैक में एक नेविगेशन नियंत्रक होना चाहिए।

बग को पुन: उत्पन्न करने के लिए:

  1. एक नया स्टोरीबोर्ड बनाएं जो आकार की कक्षाओं का उपयोग करता है।
  2. दो दृश्य नियंत्रक (कोई नेविगेशन नियंत्रक नहीं) बनाएँ।
  3. उदाहरण के लिए, पहले व्यू कंट्रोलर को एक बटन से जुड़े शो (जैसे पुश) सेगमेंट के माध्यम से दूसरा व्यू कंट्रोलर दिखाएँ
  4. कोड में, पहले दृश्य नियंत्रक को दिखाएं, लेकिन इसे initWithRootViewController:विधि के माध्यम से नेविगेशन नियंत्रक में एम्बेड करें ।
  5. IOS 7 पर ऐप चलाएं।
  6. उस बटन पर टैप करें जिसे पुश करना चाहिए।
  7. आपको iOS 7. पर पुश के बजाय एक मोडल ट्रांज़िशन मिलेगा। iOS 8 में आपको सही, पुश व्यवहार मिलेगा।

यहाँ छवि विवरण दर्ज करें

बग को ठीक करने के लिए:

  1. स्टोरीबोर्ड में एक नेविगेशन नियंत्रक जोड़ें और रूट दृश्य नियंत्रक होने के लिए पहला दृश्य नियंत्रक सेट करें। (नोट: मूल दृश्य नियंत्रक के रूप में दूसरा जोड़ना इस बग को ठीक नहीं करेगा।)
  2. नेविगेशन कंट्रोलर को दुर्गम होने के बारे में चेतावनी को दबाने के लिए, और अपने आप को यह प्रमाणित करने के लिए कि यह वर्कअराउंड के रूप में पूरी तरह से मौजूद है, को रद्दी पहचानकर्ता दें। (जैसे workaround for show segues in iOS 7)।

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि दूसरे चित्र में नेविगेशन नियंत्रक को कैसे जोड़ा गया था, और इसके पास कोई भी आने वाला तीर नहीं है (अर्थात इसके दृश्य नियंत्रक पहचानकर्ता का उपयोग करने के अलावा इसे तत्काल करने का कोई तरीका नहीं है)।


1
धन्यवाद, नेविगेशन के साथ चाल ट्रूकॉलर ने मेरे लिए यह किया था जब im स्वैपिंग द रूट नेविगेशनकंट्रोलर ViewController- स्टैक
पीटर पिंट

1
सबसे अच्छा उपाय। धन्यवाद
Илья Голованов

13

मुझे पता है कि मुझे इसमें देरी हो रही है लेकिन मैं जो कुछ भी सीखता हूं उसे साझा करना चाहता हूं। यह वास्तव में एक बग है और आज भी (2014-12-18) मौजूद है।

मैंने यहां इस बारे में एक लेख लिखा था

यह आसानी से प्रतिलिपि प्रस्तुत करने योग्य है; iOS8 पर ठीक काम करेगा और यहां तक ​​कि iOS7.x में भी जब तक आप कॉल करने से पहले किसी व्यू कंट्रोलर को प्रोग्रामेटिक रूप से स्टैक में पुश नहीं करते हैंShow

यदि आप केवल स्टोरीबोर्ड कनेक्शन का उपयोग करके स्टैक को धक्का देते हैं तो यह काम करेगा; लेकिन जाहिरा तौर पर अगर आप किसी तरह से कोड के माध्यम से धक्का देते हैं, तो धक्का देने की navigationControllerसंपत्ति UIViewControllerहोगी nilऔर जब आप कॉल करेंगेShow यह एक मोडल मान लेगा क्योंकि स्टैक को नियंत्रित करने के लिए कोई नेविगेशन नहीं है।

अब तक केवल वर्कअराउंड या तो कोड (संभव नहीं) के माध्यम से धक्का नहीं है या अब पदावनत का उपयोग करें Push

मैंने एक रडार (लेख पर लिंक) दर्ज किया। Apple के इस मुद्दे को ठीक करने की आशा के साथ डुप्लिकेट फाइल करने के लिए स्वतंत्र महसूस करें।


3
यह वास्तव में मेरा मुद्दा था, धन्यवाद! पदावनत पुश का उपयोग करना इस मामले में कम बुराई समाधान लगता है।
मोशे गोटलिब

स्टोरीबोर्ड में एक (अप्रयुक्त) नेविगेशन कंट्रोलर जोड़ने के लिए एक और समाधान है। देखें stackoverflow.com/questions/24184003/...
Senseful

Nop! यहाँ हो रहा है और इसका कारण प्रोग्रामेटिक रूप से धक्का नहीं है। मेरे मामले में मैं एक Showसेगमेंट करता हूं , फिर दूसरे Showसेगमेंट पर इसे मामूली रूप से प्रस्तुत किया जाता है, समाधान?
फ्रेड

@ क्या आप जीथुब रेपो से जुड़ सकते हैं जहां यह प्रजनन योग्य है? क्या आप iOS के किस संस्करण पर चल रहे हैं?
एस्टोरहे

निजी परियोजना .. ऐसा तब होता है जब Showआईओएस 7 पर एक व्यू-कॉन्ट्रोलर के (दूसरे) प्रदर्शन की कोशिश की जाती है
फ्रेड जूल

2

मेरे पास Xcode 7 और iOS 7.1.2 में सेगमेंट के साथ एक ही मुद्दा था। शो सेग्यू (iOS 8 से नया फीचर) iOS 7 में मोडल सेगमेंट की तरह काम करता है और जब आप अपने स्टोरीबोर्ड में Xcode के साथ segue टाइप को परिभाषित करते हैं तो आप अपने व्यू कंट्रोलर्स को नेविगेशन कंट्रोलर स्टैक में पुश करने की अनुमति नहीं देते हैं। इसीलिए आपका self.navigationController शून्य हो जाएगा, क्योंकि व्यू कंट्रोलर को स्टैक पर नहीं धकेला गया था और आप इसे पॉप नहीं कर सकते।

मुझे समझ नहीं आ रहा है कि Apple ने Xcode में इस ऐप के लिए कोई नोटिफिकेशन क्यों नहीं जोड़ा, जब आपको iOS 7 पर काम करने के लिए आपके ऐप की ज़रूरत है। वे कहते हैं कि पुश मेथड डिप्रेस्ड है, लेकिन शो iOS 7 के साथ सही से काम नहीं करता है।

मैंने इस मुद्दे को हल करने के लिए क्या किया है:

मैंने .h के साथ MYShowSegue क्लास बनाई है

#import <UIKit/UIKit.h>

@interface MYShowSegue : UIStoryboardSegue

@end

और केवल एक प्रदर्शन विधि के साथ .m फ़ाइल :

#import "MYShowSegue.h"

@implementation MYShowSegue

- (void) perform {

    if ([[[self sourceViewController] navigationController] respondsToSelector:@selector(showViewController:sender:)]) {

        id sender = nil;
        [[[self sourceViewController] navigationController] showViewController:[self destinationViewController] sender:sender];
    }else{

        [[[self sourceViewController] navigationController] pushViewController:[self destinationViewController] animated:YES];
    }
}

@end

आपको एक कस्टम सेट करने की आवश्यकता है अपने स्टोरीबोर्ड में प्रत्येक सेगमेंट के लिए प्रकार और इसके लिए एक नया वर्ग चुनें, मेरे मामले में यह MYShowSegue था।

कस्टम सेग उदाहरण

यह समाधान आपको अपने iOS 7 ऐप्स का पूर्ण समर्थन प्राप्त करने में मदद करेगा, वे आपके दृश्य पुश करने के लिए pushViewController विधि का उपयोग करेंगे और iOS 8,9 आदि के लिए आपका segue नए (iOS 8) विधि showViewController के साथ काम करेगा

अपने स्टोरीबोर्ड में अपने सभी सेगमेंट के साथ ऐसा करना न भूलें।


अच्छा समाधान - मेरे लिए काम किया ("अप्रयुक्त" नेविगेशन नियंत्रक जोड़ने के बजाय ...
लॉरेंज ग्लुक

1

यह अभी भी iOS 10.x में हो रहा है

सेगमेंट को हटाने और फिर से इंस्टेंट करने से मेरे लिए कुछ भी हल नहीं हुआ:

समस्या: पुनर्निर्मित कार्यक्षमता 7 सेगमेंट थी जो केवल एक 'पुश' (वास्तव में एक शो डिटेल) के रूप में काम करती है, लेकिन वास्तव में केवल पहला सेगमेंट जिसे मैंने जोड़ा था, अन्य सभी मामूली व्यवहार करेंगे। यह इंटरफ़ेस बिल्डर द्वारा प्रत्येक सेगमेंट को पहचान के साथ वर्णन करने के बावजूद है।

समाधान: मुझे 6 सेगमेंट में एक्शन जोड़ना था, जो इसके पास नहीं था।

मूल स्टोरीबोर्ड एक्सएमएल

<connections>
  <segue destination="tIr-4a-WfZ" kind="showDetail" identifier="A" action="showViewController:sender:" id="8yd-Ne-7KA"/>
  <segue destination="4mB-YE-5dM" kind="showDetail" identifier="B" id="Uod-JC-786"/>
  <segue destination="Qh5-bJ-KcE" kind="showDetail" identifier="C" id="3PW-nV-hWl"/>
  <segue destination="EI6-f4-QBB" kind="showDetail" identifier="D" id="WUK-ju-KDm"/>
  <segue destination="nTz-N4-fpW" kind="showDetail" identifier="E" id="Id6-bW-Huc"/>
  <segue destination="JEp-CH-6dW" kind="showDetail" identifier="F" id="G0L-XW-7f4"/>
  <segue destination="AET-S1-O6h" kind="showDetail" identifier="G" id="3NK-93-wTy"/>
</connections>

मैंने इसे ShowViewController: प्रेषक जोड़कर बदल दिया

<connections>
  <segue destination="tIr-4a-WfZ" kind="showDetail" identifier="A" action="showViewController:sender:" id="8yd-Ne-7KA"/>
  <segue destination="4mB-YE-5dM" kind="showDetail" identifier="B" action="showViewController:sender:" id="Uod-JC-786"/>
  <segue destination="Qh5-bJ-KcE" kind="showDetail" identifier="C" action="showViewController:sender:" id="3PW-nV-hWl"/>
  <segue destination="EI6-f4-QBB" kind="showDetail" identifier="D" action="showViewController:sender:" id="WUK-ju-KDm"/>
  <segue destination="nTz-N4-fpW" kind="showDetail" identifier="E" action="showViewController:sender:" id="Id6-bW-Huc"/>
  <segue destination="JEp-CH-6dW" kind="showDetail" identifier="F" action="showViewController:sender:" id="G0L-XW-7f4"/>
  <segue destination="AET-S1-O6h" kind="showDetail" identifier="G" action="showViewController:sender:" id="3NK-93-wTy"/>
</connections>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.