私は通常、IBスタッフなしでプロジェクトを作成します。最初に行うことは、xib、アウトレットの更新されたplistなどへのすべての参照を削除することです。 (私の世界では)問題なく動作します!
さて、3.2をインストールして、初めてのiPadアプリを開発しようとしました。前と同じ手順に従って、UISplitViewベースのアプリケーションプロジェクトを作成し、すべてのIBを削除しました。また、Appleのリファレンスドキュメントのセクションに従いました: プログラムによるSplit View Controllerの作成 、それにもかかわらず、マスタービューは表示されず、詳細のみ-viewは(向きに関係なく)です。私は本当にこれを注意深く見ようとしましたが、私が見逃したことを理解できません。
ペン先がどこかに浮かんでいないUISplitViewControllerの動作例はありますか? Googleで検索しましたが、見つかりませんでした。または、おそらく私が見逃したことを知っていますか?
デリゲートヘッダーでsplitviewcontrollerを宣言し、didfinishlaunchingでこのようなものを使用します
uISplitViewControllerDelegateをDetailedViewControllerヘッダーファイルに追加し、デリゲートメソッドも持っていることを確認してください。関連するヘッダーファイルをインポートすることを忘れないでください
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
splitViewController = [[UISplitViewController alloc] init];
rootViewController *root = [[rootViewController alloc] init];
detailedViewController *detail = [[detailedViewController alloc] init];
UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root];
UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];
splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
splitViewController.delegate = detail;
[window addSubview:splitViewController.view];
編集-以下のスコットの優れた提案に従って、代わりにウィンドウのサブビューに追加しないでください
[self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket
[window makeKeyAndVisible];
return YES;
}
//detailedView delegate methods
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc
{
[barButtonItem setTitle:@"your title"];
self.navigationItem.leftBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
self.navigationItem.leftBarButtonItem = nil;
}
私もIBよりコードを好む;-)
古いスレッドですが、上記の手法がデバイスの向きの変更イベントに正しく応答するUISplitViewControllerの生成に失敗した場合、読者の時間と悲しみをspareしまないと思いました。あなたがする必要があります:
UISplitViewControllerのビューをメインウィンドウに追加するのではなく、
[window addSubview:splitViewController.view]; // don't do this
代わりに、メインウィンドウのルートコントローラーをUISplitViewControllerに設定します。
[self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket
Splitviewcontrollerのビューをメインウィンドウのサブビューとして(かろうじて)追加すると、兄弟ビューと共存できますが、UISplitViewControllerの目的のユースケースとは連動しません。 UISplitViewControllerはハイランダービューです。 1つしか指定できません。
私は同じ問題に出会ったばかりです。 splitviewの子viewControllerがインターフェイスの向きに自動回転できることを確認してください。
次のように、childViewControllerの関数を変更できます。
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
その後、マスタービューが表示されます。
Swift 5. version(マスタービューコントローラーと詳細ビューコントローラーの両方がNavigation Controllerに組み込まれています)
let splitViewController = UISplitViewController()
splitViewController.delegate = self
let masterVC = MasterViewController()
let detailVC = DetailViewController()
let masterNavController = UINavigationController(rootViewController: masterVC)
let detailNavController = UINavigationController(rootViewController: detailVC)
splitViewController.viewControllers = [masterNavController,detailNavController]
このコードをAppDelegateのdidFinishLaunchingWithOptions
関数に配置できます。 splitViewController
をrootViewController
のようにすることを忘れないでください
self.window!.rootViewController = splitViewController