2012-01-19 9 views
5

ストーリーボードでiOS 5を使用しています。私のUITabBarはInterface Builderを使用して作成されます。 TabBarには2つの同様のアイテムがありますが、同じリストにあり、アイテムの種類が異なります。私がやったことはありますが、私には奇妙に見えますが、それぞれUITableViewviewDidLoadに異なる「タグ」を設定して、タグに従って正しいタイプを割り当てています。UITabBar - 2つのビュー(nib)ストーリーボードを使用する同じクラス

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

もっと良い方法はありますか?コードでUITabBarを作成していないので、私のAppDelegateはかなり空です!私が設定したタイプは、私のCore Data Entityの1つの属性です。私はBorrowed Itemsを持っているリストにあり、もう1つはLent Itemsを持っていますが、彼らは同じエンティティです。

答えて

3

一般的なビューコントローラのプロパティとして型を公開し、関連するタブバー項目が選択されているときにその型を設定できます(UITabBarControllerDelegateプロトコルのtabBarController:didSelectViewController: - アプリケーションデリゲートはタブバーコントローラデリゲートになります)。

これを次のように設定します。あなたのアプリケーションデリゲートがUITabBarControllerDelegateプロトコルに準拠していることを宣言し、それをタブバーコントローラのデリゲートとして設定します(アプリケーションデリゲートがストーリーボードに接続できないため、コードでこれを行う必要があります)。あなたのapplicationDidFinishLaunchingで、あなたがYESを返す前に、次の行を追加します。

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

その後、次のデリゲートメソッドを実装:あなたは、実際のビューコントローラクラスへのViewController変数をキャストする必要があります

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

} 

をし、関連するタグを各ビューコントローラのタブバー項目に割り当てます。

+0

溶液は素敵ですね!だから、私は単にtabBarController:didSelectViewController:をApp Delegateに入れますか?明日の朝にこれを撃つだろう。ありがとう! – allaire

+0

また、アプリケーションデリゲートをタブバーコントローラのデリゲートに設定し、アプリケーションデリゲートがプロトコルに準拠していることを宣言する必要があります。 – jrturton

+0

ちょっとしたコードを分かち合いましたが、私が試したことはうまくいかなかった:/ – allaire

1

正常に動作するはずです。もう1つの選択肢は、すべての機能を持つ共通のUIViewControllerスーパークラスを作成し、その基本クラスをサブクラス化し、適切なタイプを設定するviewDidLoadの実装を提供することです。次にInterface Builderで、UITabBarビューコントローラを適切なサブタイプとして設定できます。

結果は同じですが、各数値タグの意味を覚えておく必要がないため、IBではもう少し明確になる可能性があります。

+0

提案ありがとうございました:) – allaire

関連する問題