2013-04-06 9 views
5

के साथ काम नहीं करता है मेरे पास एक टैब बार कंट्रोलर ऐप है जो स्टोरीबोर्ड का उपयोग कर रहा है। प्रत्येक टैब में UIWebview है। यदि लिंक एक बाहरी लिंक है (यदि यह मेरी साइट नहीं है) तो मैं लिंक को वेबव्यू पर लिंक पर क्लिक करना चाहता हूं, यदि मैं एक अलग UIViewControl में लिंक खोलना चाहता हूं। (जैसे पॉपूपी ट्विटर आईफोन ऐप ऐसा करता है)pushViewController TabbarController

अभी अभी; मुझे लिंक को कैप्चर करने के लिए यह कोड मिला है (यदि लिंक bing.com है तो उसे इसे एक और दृश्य नियंत्रक खोलना चाहिए) लेकिन मैं एक और UIViewController नहीं खोल सकता (इस मामले में PopViewController)।

'GundemViewController' के लिए कोई दिखाई @interface चयनकर्ता वाणी 'pushViewController: एनिमेटेड:'

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 

//CAPTURE USER LINK-CLICK. 

NSURL *url = [request URL]; 

NSString *urlString = [url absoluteString]; 

/****** 
UIWebViewNavigationTypeLinkClicked: When user click on a link in the app it senses the action 
*/ 

if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
    if ([urlString hasPrefix:@"http://www.bing.com/"]) { 

     PopViewController *popUpView = [[PopViewController alloc] initWithNibName:@"PopupViewController" bundle:nil]; 

     [self pushViewController:popUpView animated:YES]; 
     return NO; 
    } 
} 


return YES; 
} 

उत्तर

10

आप प्रत्येक टैब में नेविगेशन नियंत्रक एम्बेड कर सकते हैं, ताकि बजाय:

UITabBarController 
    Tab1 View Controller 
    Tab2 View Controller 
    Tab3 View Controller 

आप

UITabBarController 
    Tab1 Navigation Controller 
     Tab1 View Controller 
    Tab2 Navigation Controller 
     Tab2 View Controller 
    Tab3 Navigation Controller 
     Tab3 View Controller 

और इतने पर है। आप केवल नेविगेशन नियंत्रक के उदाहरण पर -pushViewController:animated: पर कॉल कर सकते हैं।

अपने ऐप प्रतिनिधि में, आप शायद अपने प्रत्येक व्यू कंट्रोलर को प्रारंभ करें, उन्हें एक सरणी में रखें, और उसके बाद उस सरणी को टैब बार नियंत्रक को असाइन करें।

UIViewController *tab1Controller = [[MyViewController alloc] initWithNibNamed:@"MyViewController" bundle:nil]; 
UINavigationController *tab1Nav = [[UINavigationController alloc] initWithRootViewController:tab1Controller]; 

// etc 

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

पर -pushViewController:animated: पर कॉल करने के बजाय पर कॉल करने के बजाय, आप इसे self.navigationController पर कॉल करेंगे।

संपादित करें:

आप एक नेविगेशन नियंत्रक नहीं करना चाहते हैं, तो आप

[self presentViewController:popUpView 
        animated:YES 
       completion:nil]; 

पॉप अप पेश करने के लिए उपयोग कर सकते हैं। पॉप अप में, जब उपयोगकर्ता बंद बटन को छूता है, तो

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

इसे खारिज करने के लिए उपयोग करें।

+0

असल में मैं केवल एक पॉपअप (सभी मौजूदा टैब और अन्य चीजों से अलग) बनाने के लिए प्रयास करने की कोशिश कर रहा हूं, मैं एक टैबबार नियंत्रक को मंच (स्टोरीबोर्ड) में खींच और छोड़ देता हूं, मैं बस एक शीर्ष दृश्य नियंत्रक बनाना चाहता हूं और जब उपयोगकर्ता क्लिक करता है बंद बटन मुझे –

+0

को खारिज करने की आवश्यकता है ऊपर दिए गए संपादन देखें। –

+0

सीमस मुझे मिला कि किसी भी विचार की सराहना की जाएगी *** वेबकिट ने वेब व्यू में एक अपरिचित अपवाद को त्याग दिया: निर्णय नीतिइसफ़ोनविगेशन: अनुरोध: फ्रेम: निर्णयसूची: प्रतिनिधि: बंडल में एनआईबी लोड नहीं कर सका: 'एनएसबंडल (लोड किया गया) 'नाम के साथ' पॉपअप व्यू कंट्रोलर ' –

1

GundemViewController क्या है यह मुझे इस त्रुटि देता है? देखें कि UINavigationController के बजाय self.navigationController से क्यों लौटाया जा रहा है। ऐसा करने का एक तरीका है कि आप व्यू कंट्रोलर को धक्का देने से पहले ब्रेकपॉइंट सेट करें और फिर self.navigationController कॉल में जाएं।

+0

गुंडेम व्यू कंट्रोलर एक UIViewController है। क्या आप उस भाग को दोबारा जांच सकते हैं। मैंने उस भाग को संपादित किया। –

+0

आप किसी भी पुराने व्यू कंट्रोलर पर '-pushViewController: एनिमेटेड:' को कॉल नहीं कर सकते हैं। आपको इसे 'UINavigationController' पर कॉल करने की आवश्यकता है। ऐसा करने का सबसे आसान तरीका 'self.navigationController' को कॉल करना है, जो नेविगेशन नियंत्रक को वापस कर देगा जो दृश्य नियंत्रक वर्तमान में है। –

+0

लेकिन जब मैं यह स्वयं कर रहा हूं। Navigation नियंत्रक कुछ भी नहीं होता है? यही समस्या है कि मैं हल करने की कोशिश कर रहा हूं। क्या मुझे कुछ याद आती है? एक विधि या कुछ? –

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