从详细信息视图中在UISplitViewController中设置根ViewController

时间:2010-11-15 22:20:05

标签: iphone objective-c ipad ios 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的子类,为什么会发生这种情况?如果我从根视图将它推到视图控制器堆栈上,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

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