在将我们最新的iPhone应用程序移植到通用应用程序时,我决定在TabBarController中使用iPad的SplitView控制器。 SplitViewController由AppDelegate为每个Tab管理。
一切正常,但我的问题是我的MasterView(在SplitView的左侧)包含4个类别按钮来更改TableViews数据。如果单击其中一个按钮,TableView需要刷新/重新加载数据,以显示所选类别的新内容。 我创建了一个函数来进行更改,并在界面构建器中将我的按钮链接到它。
在我的功能结束时,我尝试像这样刷新控制器:
[self tableView ReloadData];
但SplitView不显示刷新。还是旧的数据。 我用NSLog测试了一下,检查我的功能是否正常工作。没问题。
然后我尝试通过SplitViewController本身访问tableView,如下所示:
// PresetController is my TableViewController in the SplitView
UISplitViewController *split = (UISplitViewController *)self.parentViewController;
PresetController *detail = [split.viewControllers objectAtIndex:0];
[detail.tableView reloadData];
再次,没有错误,但没有刷新。
我错过了什么吗?有没有办法在SplitView中轻松重新加载TableViewController?我已经阅读了一些关于通过NotificationCenter向代表发送Notfication的内容,但仍然无法找到有用的资源。
修改
为了理解我的结构,这里是我在AppDelegates中设置SplitView的方法“didFinishLaunchingWithOptions”方法:
NSMutableArray *controllers = [NSMutableArray arrayWithCapacity:[self.rootController.viewControllers count]];
int tabNum = 0;
for (UIViewController *controller in self.rootController.viewControllers) {
UISplitViewController *split = [[[UISplitViewController alloc] init] autorelease];
split.tabBarItem = controller.tabBarItem;
iPadDetailView *detail = [[iPadDetailView alloc] initWithNibName:@"iPadDetailView" bundle:nil]; // a detail view will come here
UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:detail] autorelease];
split.viewControllers = [NSArray arrayWithObjects:controller, nav, nil];
[controllers addObject:split];
}
tabNum++;
答案 0 :(得分:0)
尝试:
PresetController *detail = [split.viewControllers lastObject];
索引0处的视图控制器将是您的“主”控制器,我认为“详细”控制器是具有您尝试更新的表视图的控制器。
编辑:
您不希望在标签视图中使用UISplitViewController
;它必须是rootViewController
。