首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableViewController在UISplitViewController中

UITableViewController在UISplitViewController中
EN

Stack Overflow用户
提问于 2012-11-27 11:48:24
回答 2查看 1K关注 0票数 2

当用户在主视图中选择一个单元格时,我试图加载一个特定的UITableViewController作为UISplitViewController的详细视图;但是有一些问题。当我选择单元格时,它只显示一个空白窗口,没有一个表视图控制器。

但是,如果我将App更改为只加载UITableView控制器而不使用UISplitViewController,那么它工作得很好,所以我知道我编写UISplitViewController.的方式有问题

视图等级:

代码语言:javascript
复制
UISplitViewController 
--> 
    UINavigationController 
    --> UITableViewController (DetailViewController)

    UINavigationController
    --> UIViewController (ColorViewController)

用户在ColorViewController中选择一个单元格,这将更改DetailViewController.

AppDelegate.m

代码语言:javascript
复制
- (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

代码语言:javascript
复制
- (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

代码语言:javascript
复制
@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添加替换视图,还是有更好的方法?也许这就是我问题的原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 12:45:33

我要回答我自己的问题。

出于某种原因,在主视图(ColorViewController)中,细节对象TableViewController *tvc需要声明为实例变量,而不是方法中的变量。

完成该操作后,它将正常工作并正确显示该表。

我真的不明白为什么,如果有人想解释的话。

干杯,

票数 0
EN

Stack Overflow用户

发布于 2012-11-27 12:31:50

由于您有一个导航控制器处理拆分视图的细节部分,所以您的策略应该是使用它来推送新的表视图控制器。完成此操作后,我将两个导航控制器的引用保留为应用程序委托中的属性,以便我可以将其中一个用于推送操作。

我不知道ViewController类的真正用途是什么,但是如果将它的splitViewController方法移到应用程序委托中,那么将导航控制器从局部变量更改为可以轻松访问它们的属性会更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13583607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档