【发布时间】:2011-12-25 08:03:58
【问题描述】:
在将我们最新的 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 向代表发送通知的内容,但仍然找不到有用的资源。
编辑:
为了理解我的结构,这里是我在 AppDelegates "didFinishLaunchingWithOptions" 方法中设置 SplitView 的方式:
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++;
【问题讨论】:
标签: objective-c ios ipad uisplitviewcontroller universal