嗯,可能不清楚标题。我已经从Apple的MultipleDetailView示例代码中取出了这个。每次用户从弹出式表格中选择一行时,detailViewController都会再次分配FirstDetailViewController和SecondDetailViewController。我不想一遍又一遍地分配和初始化视图控制器,我想要分配现有的已经分配和初始化的视图控制器(如果存在于选择该行的detailViewController上)。我修改了分割视图模板而不是示例代码来实现我所需要的。从程序代码:需要UISplitViewController延迟加载多个视图控制器的详细视图控制器
这是AppDelegate.h文件:
@interface iPadHelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UISplitViewController *splitViewController;
MasterViewController *masterViewController;
DetailViewController *detailViewController;
SecondDetailViewController *secondDetailViewController;
}
这是AppDelegate.m文件:
masterViewController = [[MasterViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
secondDetailViewController = [[SecondDetailViewController alloc] initWithNibName:@"SecondDetailView" bundle:nil];
splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:navigationController, detailViewController, nil];
splitViewController.delegate = detailViewController;
// Add the split view controller's view to the window and display.
[window addSubview:splitViewController.view];
[window makeKeyAndVisible];
这是MasterViewController.m:
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = indexPath.row;
[self.appDelegate.splitViewController viewWillDisappear:YES];
self.tempArrays = [NSMutableArray arrayWithArray:self.appDelegate.splitViewController.viewControllers];
[self.tempArrays removeLastObject];
if (row == 0) {
[self.tempArrays addObject:self.appDelegate.detailViewController];
self.appDelegate.splitViewController.delegate = self.appDelegate.detailViewController;
}
if (row == 1) {
[self.tempArrays addObject:self.appDelegate.secondDetailViewController];
self.appDelegate.splitViewController.delegate = self.appDelegate.secondDetailViewController;
}
self.appDelegate.splitViewController.viewControllers = self.tempArrays;
[self.appDelegate.splitViewController viewWillAppear:YES];
}
这是DetailViewController.m:
#pragma mark -
#pragma mark Split view support
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
barButtonItem.title = @"Master List";
[navigationBar.topItem setLeftBarButtonItem:barButtonItem animated:NO];
self.popoverController = pc;
}
// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
[navigationBar.topItem setLeftBarButtonItem:nil animated:NO];
self.popoverController = nil;
}
我能够延迟加载视图控制器,但是当我点击弹出栏的按钮并跳转到第二个视图控制器时,第二个视图控制器不显示弹出窗口。当我跳回到第一个详细视图控制器时,会显示弹出窗口。
基本上,here是一个类似的问题。但是到那里的下拉框的链接不起作用。
嘿谢谢你的回复。请检查编辑。 – Viraj 2011-02-16 09:23:35
这是一个解决方案(延迟加载)。但是每当你选择一行时,就执行一条if语句。不足够。查看我的编辑,了解我将选择的解决方案。 – 2011-02-16 09:48:37