iOS故事板中的两个表视图如何处理

时间:2012-08-04 08:58:18

标签: uitableview xcode4.2 storyboard ios5

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

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

我的问题是

我很担心

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

  • 如何处理细胞的选择?

请帮忙!

2 个答案:

答案 0 :(得分:5)

首先关闭:为什么不在推动的viewController上显示文件,这会占用整个屏幕?对我来说似乎更直观。

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

指定两个tableView属性,如下所示:

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

实现UITableVIew的两个委托协议

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

2,将两个UITableView添加到ViewController上,然后......

  • ...将您的奥特莱斯链接到两个tableviews
  • ...在属性检查器上将foldersTableView的Tag设置为1,将filesTableView设置为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
    }
}

希望我能正确地得到一切。如果您使用的是预XCode 4.4,请不要忘记{。1}} .m文件中的属性。

答案 1 :(得分:0)

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

- (void)viewWillAppear:(BOOL)animated
{
    [self.table2 setHidden:YES];
    [self.table1 setHidden:NO];
    // Probably reverse these in didSelectRow
}