0

基本上,我有两个用于 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 呢?

4

1 回答 1

0

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

好吧,这不会自行神奇地发生。选择第二个表视图的一排时,由您响应。您没有显示任何代码来执行此操作,因此假设您没有任何代码。

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

于 2012-10-16T17:48:58.623 回答