2009-01-25 12 views
10

के साथ टैबबार + नेविगेशन को कैसे गठबंधन करें मैं एक टैबबार + नेविगेशन ऐप को गठबंधन करने की कोशिश कर रहा हूं।एक्सकोड

मेरे पास 5 टैब बार हैं, 4 सामग्री की सूची हैं और विवरण दृश्यों पर ड्रिल करें।

मैं इस ट्यूटोरियल का पालन करने का प्रयास करें:

http://www.iphonedevforums.com/forum/iphone-sdk-development/124-view-controller-problem.html

लेकिन हमेशा एक खाली मिलता है।

यह है कि मैं क्या एक साफ परियोजना के साथ करते हैं, है:

  • मैं एक TabBar टेम्पलेट अनुप्रयोग के साथ शुरू करते हैं।
  • मैंने 5 टैब बार बटन डाले।

    @interface FirstViewController: UINavigationController {

    }

  • मैं पेड़ मोड पर मुख्य window.xib डाल & FirstViewController
  • करने के लिए चयनित पहला दृश्य बदलने
  • मैं की तरह एक नियंत्रक बनाने मैं इंटरफ़ेस बिल्डर में टैबबार नियंत्रक का चयन करता हूं, टैबबार विशेषताएँ & कक्षा को नेविगेशन नियंत्रक में बदलें।

  • मुट्ठी दृश्य & निब नाम "SecondView"

डाल जवाब में चयन करें, मैं एक खाली स्क्रीन मिलता है।

मुझे यह जोड़ना होगा कि मैं मुख्य दृश्यों से विवरण दृश्यों से नेविगेट करना चाहता हूं।

i.e मुख्य विंडो टैब बार 1 में लोगों की सूची है। मैं एक व्यक्ति का चयन करता हूं और फिर विस्तार विंडो पर नेविगेट करना चाहता हूं।

उत्तर

1

यहां एक tutorial है जो मैं काम करने में सक्षम था।

मैंने विषय पर आधिकारिक एसडीके दस्तावेज भी पढ़ा: Combining Tab Bar and Navigation Controllers। चूंकि मैं अभी भी सीख रहा हूं, ट्यूटोरियल ने मुझे दस्तावेज़ों से अधिक मदद की।

नोट: ट्यूटोरियल में, मुझे नहीं लगता कि आपको UINavigationController को उप-वर्ग करने की आवश्यकता है, और अब मैं इस विचार के साथ प्रयोग कर रहा हूं।

+1

मुझे थोड़ा देखने के लिए ले लिया, लेकिन आपके द्वारा संदर्भित ट्यूटोरियल/स्थानांतरित हो गया था। अब यह है: [यह स्थान] (http://codenugget.org/how-to-embed-a-navigation-controller-inside-a) – Critter

15

सबसे पहले, आप कभी भी UINavigationController या UITabBarController को उपclass नहीं करना चाहते हैं।

दूसरा, मैं काफी आप क्या किया नहीं मिला है, लेकिन एक सही क्रम एक टैब बार नियंत्रक के अंदर एक नेविगेशन नियंत्रक बनाने के लिए कुछ इस तरह है:

// in MyAppDelegate.h 
UINavigationController *nc1, *nc2; 
FirstTabRootViewController *vc1; 
SecondTabRootViewController *vc2; 
UITabBarController *tbc; 

// in MyAppDelegate.m 
nc1 = [[UINavigationController alloc] init]; 
vc1 = [[FirstTabRootViewController alloc] initWithNibName:nil bundle:nil]; 
vc1.tabBarItem.title = @"Tab 1"; 
vc1.tabBarItem.image = [UIImage imageNamed:@"tab1.png"]; 
vc1.navigationItem.title = "Tab 1 Data"; 
nc1.viewControllers = [NSArray arrayWithObjects:vc1, nil]; 

nc2 = [[UINavigationController alloc] init]; 
vc2 = [[SecondTabRootViewController alloc] initWithNibName:nil bundle:nil]; 
vc2.tabBarItem.title = @"Tab 2"; 
vc2.tabBarItem.image = [UIImage imageNamed:@"tab2.png"]; 
vc2.navigationItem.title = "Tab 2 Data"; 
nc2.viewControllers = [NSArray arrayWithObjects:vc2, nil]; 

tbc = [[UITabBarController alloc] init]; 
tbc.viewControllers = [NSArray arrayWithObjects:nc1, nc2, nil]; 

ध्यान दें कि यह आपके विचार नियंत्रक ही नियंत्रित करता है टैब बार में और नेविगेशन बार में टेक्स्ट/आइकन। अपने प्रत्येक टैब के लिए एक UINavigationController उदाहरण बनाएं; UINavigationController में व्यू कंट्रोलर का एक ढेर होता है (ViewControllers प्रॉपर्टी देखें) जिसमें कम से कम एक आइटम होना चाहिए - उस टैब के लिए आपका रूट कंट्रोलर। टैब प्रबंधित करने के लिए एक UITabBarController भी बनाएं।

बेशक, आप उल्लिखित वर्गों को तुरंत चालू करने और गुणों को सेट करने के लिए कोड के बजाय इंटरफ़ेस बिल्डर का उपयोग कर सकते हैं (और संभवतः)। लेकिन यह महत्वपूर्ण है कि आप समझें कि दृश्यों के पीछे क्या होता है; इंटरफ़ेस बिल्डर ऑब्जेक्ट को तुरंत चालू करने और सेट अप करने के लिए सुविधाजनक तरीका से अधिक कुछ नहीं है।

आशा है कि यह सहायक होगा; अगर यह नहीं है तो कृपया अपने प्रश्न को परिशोधित करें।

+1

बढ़िया! Спасибо, Андрей, очень помогло! – Darmen

+0

इससे बहुत धन्यवाद मिली। मैं प्रोग्रामेटिक रूप से निर्मित एक अच्छे टैब बार नियंत्रक के लिए चारों ओर देख रहा था। – Jake

1

मैंने यूआईटीएबीबार नियंत्रक और उसके अंदर कुछ यूआईएनविगेशन नियंत्रक के साथ एक आईफोन एप्लिकेशन बनाने की कोशिश की और "एमएएमसीएक्स" जैसी ही समस्याओं का सामना किया। आपके उदाहरण-कोड के साथ मैं इसे चलाने के लिए मिलता हूं :) बहुत बहुत धन्यवाद।

यहां यह है कि यह मेरे लिए कैसे काम करता है।

// YOURS 
fourthNavigation = [[UINavigationController alloc ] init ]; 
fourthViewController = [[[FourthTabRootController alloc] initWithNibName:@"FourthView" bundle:nil] autorelease]; 
fourthNavigation.tabBarItem.title = @"YOURS"; 
fourthNavigation.viewControllers = [NSArray arrayWithObjects:fourthViewController, nil]; 

// Add self-defined UIViewControllers to the tab bar 
tabBarController.viewControllers = [NSArray arrayWithObjects:firstNavigation,secondNavigation, thirdNavigation, fourthNavigation, nil]; 
// Add the tab bar controller's current view as a subview of the window 
[window addSubview:tabBarController.view]; 

अन्य UINavigationControllers "firstNavigation, ..." एक ही तरीके से बनाए जाते हैं। मैं अपने उप-वर्गीकृत UIViewController कक्षाओं से जुड़े nib-files से दृश्य तत्व लोड करता हूं। आपको आईबी में अपने दृश्य में एक नेविगेशनबार जोड़ने की ज़रूरत नहीं है, क्योंकि UINavigationController पहले से ही एक है। तो अगर आप केवल "initWithNibName"

// The designated initializer. Override to perform setup that is required before the view is loaded. 
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
    // Custom initialization 
    self.title = @"YOURS"; 
} 
return self; 
} 

मुझे आशा है कि मदद करता है में शीर्षक सेट करना होगा।

2

अभी भी उपरोक्त कोड को लागू करने के बाद आवेदन शुरू करने पर रिक्त स्क्रीन प्राप्त हो रही है। जहां मैं इसे गलत लिख रहा हूं।

nc1 = [[UINavigationController alloc] init]; 
    nc2 = [[UINavigationController alloc] init]; 
    vc1 = [[FirstRootViewController alloc]initWithNibName:@"FirstRootViewController" bundle:nil]; 
    vc1.tabBarItem.title = @"Item 1"; 
    vc1.tabBarItem.image= [UIImage imageNamed:@"home.png"]; 
    vc1.navigationItem.title = @"Tab1 Data"; 
    nc1.viewControllers = [NSArray arrayWithObjects:vc1,nil]; 
    vc2 = [[SecondRootViewController alloc]initWithNibName:@"SecondRootViewController" bundle:nil]; 
    vc2.tabBarItem.title = @"Item 2"; 
    vc2.tabBarItem.image= [UIImage imageNamed:@"home.png"]; 
    vc2.navigationItem.title = @"Tab2 Data"; 
    nc2.viewControllers = [NSArray arrayWithObjects:vc2,nil]; 
    tbc = [[UITabBarController alloc]init]; 
    tbc.viewControllers = [NSArray arrayWithObjects:nc1,nc2,nil]; 
    [window addSubview:tbc.view]; 
    [window makeKeyAndVisible]; 
4

चेक इस महान वीडियो ट्यूटोरियल

"एक iPhone App टैब बार, नेविगेशन और टैब का मेल

http://www.youtube.com/watch?v=LBnPfAtswgw

आशा इस मदद आप

0

चेक बाहर का निर्माण एक नेविगेशन जोड़ना एक टैब बार इंटरफ़ेस के लिए नियंत्रक "View Controller Catalog for iOS के तहत जो आपको कदम से कदम उठाता है कि यह वास्तव में कैसे हो सकता है eved