1

私は、TabBarControllerを含む詳細領域を持つSplitViewを持つUIを作成しようとしています。 TabBarControllerは、SplitViewのRootViewControllerで選択された項目の3種類の詳細を表示します。SplitViewController UIレイアウト

これまでのところ、私はSPlitViewを表示しているTabBarを次のようにしています。

1)SplitViewベースの新しいアプリを作成しました。
2)新しいTabBarベースのアプリケーションを作成
3)FirstViewとSecondViewコントローラの.xib、.h、.mファイルをTabBarアプリからSplitViewアプリにコピーします。
4)私のアプリケーションデリゲートヘッダーファイルに以下を追加しました。

@class RootViewController; 
@class DetailViewController; 
@class FirstViewController; 
@class SecondViewController; 

@interface SplitViewTemplateAppDelegate : NSObject <UIApplicationDelegate> { 

    UIWindow *window; 

    UISplitViewController *splitViewController; 
    UITabBarController *tabBarController; 

    RootViewController *rootViewController; 
    DetailViewController *detailViewController; 
    FirstViewController *firstViewController; 
    SecondViewController *secondViewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 

@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController; 
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController; 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 
@property (nonatomic, retain) IBOutlet FirstViewController *firstViewController; 
@property (nonatomic, retain) IBOutlet SecondViewController *secondViewController; 

5)はIBでMainWindow.xibを開いて、UITabController
6)にたDetailsView上のクラスを変更するには、私のアプリケーションデリゲートモジュールファイルに次のコードを追加しました。

#import "FirstViewController.h" 

@synthesize window, splitViewController, rootViewController, detailViewController, tabBarController, firstViewController, secondViewController; 

-(void) makeTabBarController { 
    NSMutableArray *controllers = [NSMutableArray arrayWithArray:splitViewController.viewControllers]; 
    int index = 0; 
    for (UIViewController *controller in splitViewController.viewControllers) { 
     if (index == 1) { 

      //NSLog(@"Index is: %@", index); 
      //NSLog(@"Controller name is: %@", controller.title); 

      UINavigationController *localNavController; 
      tabBarController = [[UITabBarController alloc] init]; 
      NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:2]; 

      firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil]; 
      localNavController = [[UINavigationController alloc] initWithRootViewController:firstViewController]; 
      localNavController.tabBarItem.title = @"First Tab"; 
      [firstViewController release]; 

      [localViewControllersArray addObject:localNavController]; 
      [localNavController release]; // Retained by above array 

      secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil]; 
      localNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController]; 
      localNavController.tabBarItem.title = @"Second Tab"; 
      [secondViewController release]; 

      [localViewControllersArray addObject:localNavController]; 
      [localNavController release]; // Retained by above array 

      tabBarController.viewControllers = localViewControllersArray; 
      [localViewControllersArray release]; // Retained thru above setter 

      //tabBarController.delegate = splitViewController; 
      [controllers replaceObjectAtIndex:index withObject:tabBarController]; 
     } 
     index++; 
    } 
    splitViewController.viewControllers = controllers; 
} 

7)didFinishLaunchingWithOptionsメソッドに次を追加しました。

[self makeTabBarController]; 

ここでは、右側にタブバーコントローラが2つあり、すぐにSplitViewを見ることができます。タブは、ビューを切り替えるために機能します。

私が現在苦労していることはいくつかあります。

  1. Popoverを起動するボタンがありません。各タブビューにこれを追加する必要がありますか?
  2. RootViewControllerをTabBarControllerにフックして、選択した項目の詳細が表示されるようにするにはどうすればよいですか?
+0

私のコードに何が起こったのですか?正しくフォーマットできます。 – sparkymark75

+0

hmは、リストマークアップとコードマークアップに問題があるようです。私はコードがよく見えるようにそれを変更しました – vikingosegundo

+0

ありがとう、あなたは私の質問に答えることができますか? ;) – sparkymark75

答えて

0

これについての回答をまだ探しているのかどうかはわかりません。私は、複数の詳細ビューについての質問と非常によく似た問題に遭遇しました。最後に、私が発見し、リンゴの開発者サイトからこのソリューションを使用:

SubstitutableDetailViewController

彼らのソリューションは、実装が非常に簡単かつ非常に理解しやすいです。

質問の2番目の部分に関しては、TabBarController Delegateに、現在の詳細ビューの分割ビューの左側のビューを通知させることができます。その情報を使用して、適切なビューを更新することができます。

関連する問題