【发布时间】:2011-02-16 09:07:58
【问题描述】:
好吧,标题可能不清楚。我已经从 Apple 的 MultipleDetailView 示例代码中删除了这个。每次用户从弹出的表中选择一行时, detailViewController 都会再次分配 FirstDetailViewController 和 SecondDetailViewController。我不想一遍又一遍地分配和初始化视图控制器,我想将现有的和已经分配和初始化的视图控制器分配给选择行时的 detailViewController。我已经修改了拆分视图模板而不是示例代码来实现我所需要的。程序代码:
这是 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 是一个类似的问题。但是那里的投递箱的链接不起作用。
【问题讨论】:
标签: ipad lazy-loading uitableview uisplitviewcontroller uipopovercontroller