3

次のように、UISplitView (完全に別のビュー内) に移動するアプリがあります。

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController.view.superview == nil) {
        if (self.myDayController == nil) {
            MyDayController *myController = [[MyDayController alloc] initWithNibName:@"MyDay" bundle:nil];
            self.myDayController = myController;
            [myController release];
        }

        [homeScreenController.view removeFromSuperview];
        [self.view insertSubview:self.myDayController.view atIndex:0];
    }
}

メインのナビゲーション画面で行う

現在、MyDayController には MyDay.xib という XIB があり、次の項目があります。

ファイルの所有者: MyDayController

ファーストレスポンダ: UIResponder

スプリット ビュー コントローラー

 ---->Navigation Controller

         ---->Navigation Bar

         ----> Table View Controller

                 ----> Navigation Item

 ---->View Controller

それで、ここでさらにいくつかのコンポーネントが必要です。UITableViewController と UISplitViewControllerDelegate が必要ですか?

これらのプロトコルを MyDayController に実装するつもりでしたが、これは標準ですか?

したがって、上記のコードの後、エラーが発生します。

-[UIViewController _loadViewFromNibNamed:bundle:] は "MyDay" nib をロードしましたが、ビュー アウトレットが設定されていませんでした。

では、UISplitViewController を使用してどのように修正できますか? UISplitViewController にビュー プロパティがあることはわかっていますが、それを使用したり、IB に接続したりできませんか?

どうもありがとう

マーク

4

3 に答える 3

5

UISplitViewController をサブクラス化する必要はありません。「MyDayController」クラスの動作は何ですか? UISplitViewController は基本的に、マスター ビューと詳細ビューのレイアウトを処理するだけなので、これらのコントローラーを実装するのはユーザーの責任です。

分割ビューがアプリの最上位にある場合は、アプリのメイン ウィンドウ nib に追加できます。そうでない場合は、プログラムで作成してください。

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController == nil) {
        YourMasterViewController *masterViewController = [[YourMasterViewController alloc] initWithNibName:@"MasterView" bundle:nil];
        YourDetailViewController *detailViewController = [[YourDetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
        UISplitViewController *myController = [[UISplitViewController alloc] init;
        myController.viewControllers = [NSArray arrayWithObjects:masterViewController, detailViewController, nil];
        [masterViewController release];
        [detailViewController release];

        self.myDayController = myController;
        [myController release];         
    }

    [homeScreenController.view removeFromSuperview];
    [self.view insertSubview:self.myDayController.view atIndex:0];
}

self.myDayController.view.superview == nil暗黙的であるため、テストも必要ありませんself.myDayController == nil

于 2010-12-09T06:28:13.737 に答える
1

クリストファー・ピックスレイ、ありがとう。この解決策は私にとってはうまくいきますが、あなたが与えたものを修正する必要があります。以下の私のコードを見てください。

委任ファイル

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    LeftViewController *leftViewController = [[LeftViewController alloc] init];// initWithNibName:@"LeftViewController" bundle:nil];
    RightViewController *rightViewController = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
    UISplitViewController *myController = [[UISplitViewController alloc] init];
    myController.viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil];

    self.window.rootViewController = myController;

    [self.window makeKeyAndVisible];
    return YES;
}

お役に立てれば。

于 2012-10-06T16:30:14.620 に答える
0

マスターと詳細の両方でナビゲーションコントローラーを使用して作成する場合は、これを行うことができます

self.rootViewController=[[RootViewController alloc]init];
    self.detailViewController=[[FirstDetailViewController alloc]init];

    UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
    UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];

    self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil];
    self.splitViewController.delegate=self.detailViewController;
于 2011-02-02T08:53:56.577 に答える