SplitView的DetailView上的UITableView不会加载它的数据

时间:2012-03-21 18:47:43

标签: objective-c uitableview ios5 uisplitviewcontroller

使用Xcode 4.3.1,适用于iOS 5.1的ipad应用程序,无核心数据

在我的故事板上,我有一个主要细节项目。主人显然有一个TableView,并且工作正常:通过在主表视图中选择一个项目,我的详细数据通过模板代码调用setDetailItem(我从'didSelectRowAtIndexPath'调用)在详细视图控制器中设置。这很好。

我的DetailView / Scene包含(另一个)UITableView(以及其他一些TextFields等) 此UITAbleView的数据源和委托连接到详细视图控制器。 在详细视图控制器的接口文件中,我添加了协议UITableViewDataSource和UITableViewDelegate(在预先配置的UISplitViewControllerDelegate旁边)。

我在详细视图控制器中实现了方法numberOfSectionsInTableView,numberOfRowsInSection,cellForRowAtIndexPath,didSelectRowAtIndexPath方法。

但是,这些仅在构建主表视图列表时调用,而不是在我在主列表/ tableview中选择项目时调用。当我在主列表/ tableview中选择一个项时,详细数据get在set viewcontroller中设置,但是例如,从不调用detail控制器中的'cellForRowAtIndexPath',并且不更新/初始化详细TableView。 (然而,详细视图中的文本字段加载了正确的数据)。

我想我错过了一些东西。在准备好数据时,我是否必须给桌面看一眼?如果是这样,怎么......? tableview本身没有连接到插座或动作,是吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要实现从RootView到Detailview的自定义委托(一对一通信)。 如下, 在RootView中实现Delegate,

@protocol RootViewControllerDelegate <NSObject>

-(void)didchangeSelectionInRootViewList:(id)toItem;

@end

并在需要时调用委托(在您的情况下在表视图didSelectRowAtIndexPath),

//a delegete need in caes of splitview to refresh the detailview.
-(void)callDelegate:(id)sender  {
    if(self.delegate && [self.delegate respondsToSelector:@selector(didchangeSelectionInRootViewList:)])    {
        [self.delegate didchangeSelectionInRootViewList:sender];
    }
}

在创建splitview控制器时,不要忘记将Rootview中的委托设置为detailview。

并且还在Detailview中捕获委托并重新加载TableView,并加载足够的数据。

感谢,

Naveen Shan