2

在我的 iPad 应用故事板设计中,添加了两个表格视图。

一个表格视图用于显示文件夹名称,另一个表格视图用于显示文件名。选择文件夹表格视图单元格时,所选文件夹内的文件需要显示在另一个表格视图(文件表格视图)中。

我的问题是

我很困惑

  • 如何为每个表视图添加委托和数据源ViewController?或者是否可以在 ViewController 以外的自定义类中为每个表视图添加数据源和委托?

  • 如何处理单元格的选择?

请帮忙 !

4

2 回答 2

5

首先:为什么不直接在占据整个屏幕的推送视图控制器上显示文件?对我来说似乎更直观。

如果你想用两个 tableViews 来做,并假设它们使用动态单元格:
1,你的视图控制器的 .h 文件中

像这样指定两个 tableView 属性:

@property (weak, nonatomic) IBOutlet UITableView *foldersTableView;
@property (weak, nonatomic) IBOutlet UITableView *filesTableView;

实现 UITableVIew 的两个委托协议

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

2,将两个 UITableViews 添加到您的 ViewController 上,然后...

  • ...将您的奥特莱斯链接到两个表格视图
  • ...在属性检查器上,将文件夹表视图的标记设置为 1,将文件表视图的标记设置为 2
  • ...选择每个 UITableViews,转到 Connections Inspector 并将它们的两个委托方法(委托和数据源)链接到您的 ViewController(对于它们两者)

3,在你的 ViewController 的 .m 文件中实现 UITableView 的三个数据源方法,如下所示:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    if (tableView.tag == 1) {
       return theNumberOfSectionsYouWantForTheFolderTableView;
    } else {
       return theNumberOfSectionsYouWantForTheFilesTableView;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    if (tableView.tag == 1) {
       return [foldersArray count];
    } else {
       return [filesArray count];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        if (tableView.tag == 1) {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    return cell;

} else {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...

    return cell;
}
}

4、实施选择:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.tag == 1) {
        //fill filesArray with the objects you want to display in the filesTableView...
        [filesTableView reloaddata];
    } else {
        //do something with the selected file
    }
}

希望我得到了正确的一切。@synthesize如果您使用的是 XCode 4.4 之前的版本,请不要忘记.m 文件中的属性。

于 2012-08-05T10:26:33.003 回答
0

如果您使用多个表,请不要忘记酌情隐藏:

- (void)viewWillAppear:(BOOL)animated
{
    [self.table2 setHidden:YES];
    [self.table1 setHidden:NO];
    // Probably reverse these in didSelectRow
}
于 2012-08-10T19:26:54.070 回答