当用户在主视图中选择一个单元格时,我试图加载一个特定的UITableViewController作为UISplitViewController的详细视图;但是有一些问题。当我选择单元格时,它只显示一个空白窗口,没有一个表视图控制器。
但是,如果我将App更改为只加载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添加替换视图,还是有更好的方法?也许这就是我问题的原因?
发布于 2012-11-27 12:45:33
我要回答我自己的问题。
出于某种原因,在主视图(ColorViewController)中,细节对象TableViewController *tvc需要声明为实例变量,而不是方法中的变量。
完成该操作后,它将正常工作并正确显示该表。
我真的不明白为什么,如果有人想解释的话。
干杯,
发布于 2012-11-27 12:31:50
由于您有一个导航控制器处理拆分视图的细节部分,所以您的策略应该是使用它来推送新的表视图控制器。完成此操作后,我将两个导航控制器的引用保留为应用程序委托中的属性,以便我可以将其中一个用于推送操作。
我不知道ViewController类的真正用途是什么,但是如果将它的splitViewController方法移到应用程序委托中,那么将导航控制器从局部变量更改为可以轻松访问它们的属性会更容易。
https://stackoverflow.com/questions/13583607
复制相似问题