如何在UISplitviewcontroller中换出masterview?

时间:2012-10-16 17:33:52

标签: ios uisplitviewcontroller master-detail

基本上,我有一个用于splitViewController的两个MasterViewControllers,但我只能一次运行其中一个应用程序。两个MasterViewControllers都使用相同的DetailViewController。 当用户按下tabbarbutton时,将推送第二个masterViewController。

splitViewController直接在AppDelegate

中声明如下
MasterViewControllerOne *mvc1 = [[MasterViewControllerOne alloc] initWithNibName:@"MasterViewControllerOne_iPad" bundle:nil];
UINavigationController *masterOneNavigationController = [[UINavigationController alloc] initWithRootViewController:mvc1];

DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:dvc];

self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = @[masterOneNavigationController, detailNavigationController];
self.window.rootViewController = self.splitViewController;

在运行时,我希望MasterViewControllerTwo与MasterViewControllerOne交换

推送新视图控制器的操作:

MasterViewControllerTwo*mvc2=[[MasterViewControllerTwo alloc]initWithNibName:@"MasterViewControllerTwo_iPad" bundle:nil];
[self.navigationController pushViewController:mvc2 animated:YES];

这在mvc1顶部的mvc2中交换。但是,在mvc2中点击tableview的行不会激活DetailViewController。

要激活DetailView(mvc1和mvc2相同),请执行以下操作

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Item *theItem =[[self.items objectAtIndex:[indexPath section]]objectAtIndex:[indexPath row]];
    [self.detailViewController setLabelsForItems:theItem];
}

只要在appdelegate中将MasterViewController定义为splitviewcontrollers数组的成员,就可以正常工作。那么为什么mvc2在它位于堆栈顶部时不激活DetailViewController呢?

1 个答案:

答案 0 :(得分:0)

  

在mvc2中点击tableview的行不会激活   DetailViewController

嗯,这本身并不会神奇地发生。当您选择第二个表视图的行时,由您决定。您没有显示任何代码,因此假设您没有。

换句话说,除了包含主控和细节之外,拆分视图控制器本身不执行任何操作。主人和细节之间的沟通取决于你。模板向您展示了您需要做的事情。