2012-01-19 127 views
5

我使用iOS 5與故事板。我的UITabBar是使用Interface Builder創建的。我的TabBar中有兩個相似的項目,它們是相同的列表,只是其中有不同類型的項目。我所做的,但看起來很奇怪,正在爲每個UITableViewviewDidLoad設置一個不同的「標籤」,然後根據標籤分配正確的類型。UITabBar - 兩個視圖(筆尖)相同的類使用故事板

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

還有更好的方法嗎?我沒有在代碼中創建我的UITabBar,所以我的AppDelegate非常空!我設置的類型只是我的一個核心數據實體中的一個屬性,在一個列表中我有借用項目,另一個是我有Lent項目,但它們是同一個實體。

回答

3

,可以將該類型的普通視圖控制器上的屬性,並選擇相應的標籤欄項目時設置(從UITabBarControllerDelegate協議tabBarController:didSelectViewController: - 應用程序委託將標籤欄控制器代表)。

您可以如下設置它。聲明您的應用程序委託符合UITabBarControllerDelegate協議,然後將其設置爲標籤欄控制器的委託(因爲應用程序委託不可連接到故事板中,您必須在代碼中執行此操作)。在您的applicationDidFinishLaunching,添加下面的返回YES前:

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

然後執行以下的委託方法:

- (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

嗯,解決方案看起來不錯!所以我只是把tabBarController:didSelectViewController:在我的應用程序委託?明天早上將會拍攝這張照片,並會繼續發佈。謝謝! – allaire

+0

您還需要將應用程序委託設置爲標籤欄控制器的委託,並聲明您的應用程序委託符合協議。 – jrturton

+0

你有沒有時間分享一小段代碼,我試過的沒有工作:/ – allaire

1

你在那裏應該工作得很好。另一個選擇是擁有一個具有所有功能的通用UIViewController超類,然後對該基類進行子類化,並提供一個設置適當類型的viewDidLoad實現。然後在Interface Builder中,可以將UITabBar視圖控制器設置爲適當的子類型。

結果將是一樣的,但是在IB中可能會更清楚發生了什麼,因爲您不必依賴於記住每個數字標記的含義。

+0

感謝您的建議:) – allaire

相關問題