ユーザーがマスタービュー内のセルを選択しUITableViewController
たときに、の詳細ビューとして特定のものを読み込もうとしています。UISplitViewController
しかし、いくつかの問題があります。セルを選択すると、テーブルビューコントローラーのない空白のウィンドウが表示されます。
ただし、App Delegateを変更して、UITableView
コントローラーを使用せずにコントローラーをロードするように変更するUISplitViewController
と、正常に機能するため、コーディング方法に問題があることがわかります。UISplitViewController.
ビュー階層:
UISplitViewController
-->
UINavigationController
--> UITableViewController (DetailViewController)
UINavigationController
--> UIViewController (ColorViewController)
ユーザーがセルを選択するColorViewController
と、セルが変更されます。DetailViewController.
でAppDelegate.m
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.viewController = [[ViewController alloc] init];
self.window.rootViewController = [self.viewController splitViewController];
[self.window makeKeyAndVisible];
return YES;
}
でViewController.m
:
- (UIViewController *) splitViewController {
// Create the navigation-run root view
ColorViewController *rootVC = [ColorViewController controller];
UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:rootVC];
// Create the navigation-run detail view
DetailViewController *detailVC = [DetailViewController controller];
UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detailVC];
// Add both to the split view controller
svc = [[UISplitViewController alloc] init];
svc.viewControllers = [NSArray arrayWithObjects: rootNav, detailNav, nil];
svc.delegate = detailVC;
return svc;
}
でColorViewController.m
:
@interface ColorViewController : UITableViewController
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIViewController *controller = (UIViewController *)self.splitViewController.delegate;
TableViewController *tvc = [[TableViewController alloc] init];
[controller.view addSubview:tvc.view];
}
内の詳細ビューを変更するための最良の方法は何UISplitViewController
ですか?上記のように置換ビューを追加するUIViewController
必要がありますか、それともより良い方法がありますか?多分それが私の問題の原因ですか?