当用户在主视图中选择一个单元格时,我正在尝试加载特定UITableViewController
作为UISplitViewController
的详细信息视图;但有一些问题。当我选择单元格时,它只显示一个没有表视图控制器的空白窗口。
但是,如果我将App Delegate更改为仅加载UITableView
控制器而不使用UISplitViewController
它可以正常工作,所以我知道这是我编码{{1}的方式的问题}
视图层次结构:
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
,还是有更好的方法?也许那是我问题的原因?
答案 0 :(得分:0)
由于您的导航控制器处理拆分视图的详细信息,因此您的策略应该是使用它来推送新的表视图控制器。当我完成这项工作时,我已将两个导航控制器的引用保留为应用程序委托中的属性,以便我可以使用其中一个进行推送操作。
我不确定你的ViewController
类的真正目的是什么,但是如果你将它的splitViewController
方法移动到app委托中,那么将导航控制器从局部变量更改为属性会更容易在一个可以轻松访问的地方。
答案 1 :(得分:0)
我要回答我自己的问题..
由于某种原因,在主视图(ColorViewController)中,详细对象TableViewController *tvc
需要声明为实例变量,而不是方法中的变量。
完成后,它可以正常工作并显示表格。
我真的不明白为什么,如果有人想尝试解释。
干杯,