5

मुझे एक वैश्विक नेविगेशन स्टैक चाहिए। जब उपयोगकर्ता एक ही टैब में नए दृश्य में टैब बदलता है या नेविगेट करता है, तो मैं नए दृश्य को वैश्विक नेविगेशन स्टैक पर धक्का देना चाहता हूं। मैं नेविगेशन बार में बैक बटन पिछले दृश्य पर वापस जाने के लिए चाहता हूं, जो कभी-कभी एक अलग टैब होता है, और कभी-कभी एक ही टैब में एक अलग दृश्य होता है।मैं वैश्विक नेविगेशन स्टैक कैसे बना सकता हूं?

enter image description here

+1

पीटर का उत्तर (नीचे) काम करेगा .. लेकिन यह यूआई बहुत "एंड्रॉइड" लगता है। उपयोगकर्ता एक टैब बार की तरह टैब बार की तरह काम करने की अपेक्षा करते हैं ... यह किसी अन्य ऐप की तरह काम करता है जो मैंने कभी भी उपयोग किया है और उपयोगकर्ताओं की अपेक्षाओं (खराब) के खिलाफ जाएगा। क्या एक और यूआई है जिसका उपयोग आप उसी प्रभाव को प्राप्त करने के लिए कर सकते हैं? – nielsbot

+0

मेरी राय में, येलप ऐप में खराब UI है और इसे उदाहरण के रूप में उपयोग नहीं किया जाना चाहिए :) – nielsbot

उत्तर

0

आप, अपनी पसंद का बटन के रूप में अपने UINavigationController के बाईं बार बटन की स्थापना करके एक ही लक्ष्य को हासिल कार्रवाई विधि संभाल कर रखें और क्लिक करें घटना पर उचित tabbar बटन आह्वान सकता।

आप सभी कि करने के लिए अपने रूट दृश्य नियंत्रक में जरूरत है ...

जोड़ा:

आप रूट दृश्य नियंत्रकों पर वापस बटन (नहीं मिल सका नेविगेशन नियंत्रकों की जड़ दृश्य जुड़े अपने टैबबार उदाहरण के साथ) बस टैबबार बटन दबाकर।

आपको इसे प्राप्त करने का तरीका ढूंढने की आवश्यकता है क्योंकि आपको इसे आईओएस से नहीं मिल रहा है, इसलिए आप जिस टैबलेट को टैबबार बटन दबाते हैं, वह वैरिएबल है जो पिछले चयनित इंडेक्स को स्टोर करता है और एक विधि जो किसी के लिए जानकारी देती है केवल इंडेक्स पास करके टैबबार ... तो इन दोनों का उपयोग करके आप नेविगेशन बार के अपने बाएं बार बटन का शीर्षक सेट कर सकते हैं और बाएं बार बटन पर उचित क्रिया विधि असाइन करके पिछले टैब पर वापस जा सकते हैं ...

+0

मुझे समझ में नहीं आया कि आपका क्या मतलब है? –

+0

@ZiadTamim: अद्यतन उत्तर देखें .. – Jhaliya

4

इस प्रभाव को प्राप्त करने के लिए, आप UITabBarController को हटा सकते हैं - और कस्टम दृश्य का उपयोग करके या मानक UIToolbar को अनुकूलित करके बार को अनुकरण कर सकते हैं।

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

+0

हां, यह मानक डिफ़ॉल्ट व्यवहार –

+0

एआरएम है ... तो आपको वास्तव में क्या समस्याएं हैं? –

+0

मैं सभी UIViewController को UITabBarController में एक ही UINavigationController –

0

आप UITabBarController में UINavigationController में लोड होने के लिए सभी UIViewController चाहते हैं?

तो कुछ इस तरह:

   RootViewController 
         | 
    _________ UITabbarViewController _____________________ 
    |       |       | 
UINavigationController UINavigationController UINavigationController 

आप अपने स्वयं के कस्टम के साथ "प्रयोग" की कोशिश करनी चाहिए की

  ___ RootViewController ___ 
     |       | 
UINavigationController  UITabBarViewController 

बजाय UITabBar

+0

में लोड करने के लिए चाहता हूं क्या कोई ट्यूटोरियल या कुछ उपयोगी (गाइड ...) है जो मुझे ऐसा करने में मदद कर सकता है? –

+0

आप अपना खुद का 'टैबबार' बना सकते हैं, जो वांछित 'चयनित' स्थिति वाले बटनों का एक समूह नहीं है। मैं यह हर समय करता हूं, क्योंकि मैं डिफ़ॉल्ट टैबबार के यूआई को "पसंद नहीं करता"। – basvk

+0

लेकिन अगर मैं एक मोडल व्यू कंट्रोलर प्रस्तुत करना चाहता हूं, तो यूआईटीएबीबार छुपा नहीं जाएगा ... –

0

मैं तुम्हें एक वैश्विक सरणी (NSMutableArray बनाने के लिए सुझाव देते हैं) जो एनएसआईएनवोकेशन ऑब्जेक्ट्स रखेगा। इसलिए हर बार जब आप व्यू कंट्रोलर को दबाते हैं तो आपको नेविगेशन कंट्रोलर के साथ एनएसआईएनवोकेशन को लक्ष्य के रूप में और popViewConrollerAnimated: चयनकर्ता के रूप में बनाना होगा। यदि आप टैब बार आइटम टैप कर रहे हैं तो आपको टैब बार नियंत्रक को लक्ष्य के रूप में सेट करना होगा और setSelectedViewController: चयनकर्ता के रूप में सेट करना होगा। तुम भी

- (void)setArgument:(void *)buffer atIndex:(NSInteger)index 

तो हर बार जब आप अपने वैश्विक ढेर तुम सिर्फ फोन [myLastInvocation invoke] जरूरत पॉप का उपयोग कर पैरामीटर के रूप में वर्तमान दृश्य नियंत्रक निर्दिष्ट करना चाहिए;

0

मुझे इसी तरह की समस्या थी।मैं इसे इस तरह से किया था:

टैब बदलने के लिए, का उपयोग करें: आप टैब 2 और उसके 3 दृश्य नियंत्रक

self.tabBarController.selectedIndex = 2; 

[self.tabBarController.delegate tabBarController:self.tabBarController didSelectViewController: 
    [[[self.tabBarController.viewControllers objectAtIndex:2] viewControllers] objectAtIndex:3]]; 
+0

के लिए 'UITabBarController' का उपयोग करने की आवश्यकता नहीं है क्या आप कृपया अपना विचार अधिक समझा सकते हैं? :) –

0

मैं काम कर रहा यह मिल गया पर जाना चाहते हैं, कहते हैं,। मेरे अनुभव में मुझे दो रूट नियंत्रकों के रूप मेंऔर detailedNavigationController रखने की आवश्यकता थी। UIApplicationDelegate वर्ग काम सही से उन दो तरीके:

- (void) showDetailedTab 
{ 
    CGRect normalRect = self.window.bounds; 
    CGRect rightRect = CGRectOffset(normalRect, normalRect.size.width, 0); 
    CGRect leftRect = CGRectOffset(normalRect, -normalRect.size.width, 0); 

    detailedNavigationController.view.frame = rightRect; 
    mainTabBarController.view.frame = normalRect; 
    [self.window addSubview:mainTabBarController.view]; 
    [self.window addSubview:detailedNavigationController.view]; 

    [UIView animateWithDuration:0.35 delay:0.0 options:UIViewAnimationCurveEaseOut 
        animations: ^{ 
         detailedNavigationController.view.frame = normalRect; 
         mainTabBarController.view.frame = leftRect; 
        } 
        completion: ^(BOOL finished){ 
         [mainTabBarController.view removeFromSuperview]; 
        }]; 
} 

- (void) showMainTabBar 
{ 
    CGRect normalRect = self.window.bounds; 
    CGRect rightRect = CGRectOffset(normalRect, normalRect.size.width, 0); 
    CGRect leftRect = CGRectOffset(normalRect, -normalRect.size.width, 0); 

    mainTabBarController.view.frame = leftRect; 
    detailedNavigationController.view.frame = normalRect; 
    [self.window addSubview:mainTabBarController.view]; 
    [self.window addSubview:detailedNavigationController.view]; 

    [UIView animateWithDuration:0.35 delay:0.0 options:UIViewAnimationCurveEaseOut 
        animations: ^{ 
         mainTabBarController.view.frame = normalRect; 
         detailedNavigationController.view.frame = rightRect; 
        } 
        completion: ^(BOOL finished){ 
         [detailedNavigationController.view removeFromSuperview]; 
        }]; 
} 

मुझे लगता है कि इस समाधान, बेहतर टैब बार की नकल तो है, क्योंकि यह UIViewContoller के जीवन चक्र को तोड़ने नहीं करता है।

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