从详细视图中设置根视图控制器在UISplitViewController

问题描述:

我有一个UISplitViewController,我想更改根视图控制器(在屏幕的左侧),当我点击详细视图中的按钮(右侧屏幕一侧)。从详细视图中设置根视图控制器在UISplitViewController

如果我这样做的详细视图:

NextGameViewController *newTableViewController = [[NextGameViewController alloc] init]; 
NSArray *newVCs = [NSArray arrayWithObjects:newTableViewController, self, nil]; 
splitViewController.viewControllers = newVCs; 

它崩溃,出现错误:

-[NextGameViewController setParentViewController:]: unrecognized selector sent to instance 0x4938a50 

NextGameViewController是的UITableViewController的子类,那么,为什么会出现这种情况?如果我从根视图将它推到视图控制器堆栈上,它工作正常。

UITableViewController的parentViewController是一个只读属性。有关更多讨论,请参见this SO question。这听起来像你想要在详细信息视图的左侧推送一个新的表视图,但仍然在根视图下,而不是替换你的根视图控制器本身,这就是你所描述的。

您可以使用您试图替换的数组来获取此信息。有关viewControllers属性的更多信息,请参见this link

此外,您的应用程序委托应该可以访问您的根和详细视图。您可以获取应用程序委托并使用delegate.root属性将其推送到控制器堆栈上,如前所述。事情是这样的:

MyAppDelegate* del = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
// do what you want with del.root controller here 
+0

我想完全换一个新的根视图控制器。我不想将它推入堆栈并导航。 – Senior 2010-11-16 03:16:44

+0

如果我理解你正在做的是正确的,你试图替换UISplitViewController的一半,而不是它在根中显示的表。而不是替换那里为什么不隐藏表格并在其中添加视图?这将使得回到桌子更容易,并且可能会在纵向模式下使用UISplitViewController的旋转功能。您可以访问表格,但不能访问根视图的所有功能,而不仅仅是一个表格。即使你这样做,我不认为它会做你所期望的。 – slycrel 2010-11-16 05:48:04

+0

不是,我想更改表格,但不是将其推入导航堆栈。我有效地想改变它的根源。为什么我必须换出视图而不是视图的控制器? – Senior 2010-11-16 14:04:42