2012-01-19 14 views
5

का उपयोग कर दो दृश्य (एनआईबी) एक ही कक्षा स्टोरीबोर्ड के साथ आईओएस 5 का उपयोग कर रहा हूं। मेरा UITabBar इंटरफ़ेस बिल्डर का उपयोग करके बनाया गया है। मेरे पास TabBar में दो समान आइटम हैं जो कि एक ही सूची है, बस इसमें विभिन्न प्रकार के आइटम हैं। मैंने जो किया है, लेकिन मेरे लिए अजीब लग रहा है, प्रत्येक UITableView पर और viewDidLoad में एक अलग "टैग" सेट कर रहा है, और उसके बाद टैग के अनुसार सही प्रकार असाइन करें।यूआईटीएबीबार - स्टोरीबोर्ड

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (self.tableView.tag == 1) 
    { 
     type = @"lent"; 
    } 
    else if (self.tableView.tag == 2) 
    { 
     type = @"borrowed"; 
    } 
} 

ऐसा करने का कोई बेहतर तरीका है? मैं कोड में अपना UITabBar नहीं बना रहा हूं, इसलिए मेरा AppDelegate बहुत खाली है! मेरे द्वारा सेट किया गया प्रकार सिर्फ मेरी कोर डेटा इकाई में से एक विशेषता है, जिस सूची में मैंने उधार लिया है और दूसरी तरफ मैंने आइटम दिए हैं, लेकिन वे एक ही इकाई हैं।

उत्तर

3

आप अपने सामान्य दृश्य नियंत्रक पर एक संपत्ति के रूप में टाइप का पर्दाफाश कर सकते हैं, और प्रासंगिक टैब बार आइटम का चयन करते समय इसे सेट कर सकते हैं (tabBarController:didSelectViewController: UITabBarControllerDelegate प्रोटोकॉल से - आपका ऐप प्रतिनिधि टैब बार नियंत्रक प्रतिनिधि होगा)।

आप इसे निम्नानुसार सेट करेंगे। घोषणा करें कि आपका ऐप प्रतिनिधि UITabBarControllerDelegate प्रोटोकॉल के अनुरूप है, फिर उसे टैब बार नियंत्रक के प्रतिनिधि के रूप में सेट करें (आपको कोड में ऐसा करना होगा क्योंकि ऐप प्रतिनिधि स्टोरीबोर्ड से कनेक्ट करने के लिए उपलब्ध नहीं है)।

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController; 
tbc.delegate = self; 

तो निम्नलिखित प्रतिनिधि विधि को लागू: अपने applicationDidFinishLaunching इसके पहले कि आप लौट हाँ निम्नलिखित जोड़ें

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    switch (tabBarController.tabBar.selectedItem.tag) 
    { 
     case 1: 
      viewController.property = @"propertyA"; 
      break; 
     case 2: 
      viewController.property = @"propertyB"; 
      break; 
    } 

    NSLog(@"view controller is %@",viewController); 

} 

आप अपने वास्तविक दृश्य नियंत्रक वर्ग के लिए ViewController चर कास्ट करने के लिए की आवश्यकता होगी, और प्रत्येक दृश्य नियंत्रक के टैब बार आइटम में प्रासंगिक टैग भी असाइन करें।

+0

एचएम, समाधान अच्छा लग रहा है! तो मैंने बस टैबबार नियंत्रक डाला: किया गया चयन दृश्य नियंत्रक: मेरे ऐप प्रतिनिधि में? कल सुबह एक शॉट दे देंगे और आपको पोस्ट रखेंगे। धन्यवाद! – allaire

+0

आपको टैब बार नियंत्रक के प्रतिनिधि होने के लिए ऐप प्रतिनिधि सेट करने की भी आवश्यकता होगी, और घोषणा करें कि आपका ऐप प्रतिनिधि प्रोटोकॉल के अनुरूप है। – jrturton

+0

क्या आपके पास कोड का एक छोटा स्निपेट साझा करने के लिए एक मिनट है, मैंने जो कोशिश की वह काम नहीं किया:/ – allaire

1

आपके पास क्या काम है ठीक काम करना चाहिए। एक और विकल्प एक सामान्य UIViewController सुपर क्लास होना चाहिए जिसमें सभी कार्यक्षमताएं हों और फिर उस बेस क्लास को उप-वर्ग करें और viewDidLoad का कार्यान्वयन प्रदान करें जो उचित प्रकार निर्धारित करता है। फिर इंटरफ़ेस बिल्डर में आप UITabBar व्यू कंट्रोलर को अपने उपयुक्त उपप्रकार के रूप में सेट कर सकते हैं।

परिणाम वही होगा, लेकिन आईबी में यह थोड़ा और स्पष्ट हो सकता है कि क्या हो रहा है क्योंकि आपको प्रत्येक संख्यात्मक टैग के अर्थ को याद रखने पर भरोसा नहीं करना है।

+0

सुझाव के लिए धन्यवाद :) – allaire

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