基本上,我有两个用于 splitViewController 的 MasterViewController,但我一次只能使用其中一个来运行应用程序。两个 MasterViewController 都使用相同的 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 呢?