刷新UISplitView控制器的主TableView

时间:2011-11-09 13:40:47

标签: objective-c ios ipad uisplitviewcontroller universal

在将我们最新的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++;

1 个答案:

答案 0 :(得分:0)

尝试:

PresetController *detail = [split.viewControllers lastObject];

索引0处的视图控制器将是您的“主”控制器,我认为“详细”控制器是具有您尝试更新的表视图的控制器。

编辑:

您不希望在标签视图中使用UISplitViewController;它必须是rootViewController