Xcode:将TableView添加到自定义Cell中

时间:2015-08-07 10:28:31

标签: ios objective-c xcode uitableview

我试图做一些事情,但既没有在网上找到一些例子,也不知道是否有可能。

我需要以编程方式将一个表添加到tbaleview的第一个单元格中。

当我尝试设置第二个表的委托和数据源(第一个表中的那个)时,代码给了我问题

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    [[NSBundle mainBundle] loadNibNamed:@"CellaMenu" owner:self options:NULL];
    cell = cellaMenu;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.userInteractionEnabled = NO;
    tabellaMenu = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    tabellaMenu.dataSource = self;
    tabellaMenu.delegate = self;
    [cell.contentView addSubview:tabellaMenu];
}

这样代码循环。如果我没有设置委托和dataSource表格,但我需要它们来创建自定义处理程序。 任何提示?

5 个答案:

答案 0 :(得分:2)

最简洁的方法是在视图控制器中使用另一个UITableViewDataSource和UITableViewDelegate兼容对象,然后将第二个表视图的委托和dataSource设置为该对象。

答案 1 :(得分:1)

代码进入循环,因为单元格中的tabellaMenu表将委托和数据源设置为self。因此,它继续在自己上调用表数据源方法并创建新单元并进入循环。

您可以创建一个单独的对象(NSObject的子类)并在其中定义表委托和数据源方法,并将其设置为tabellaMenu的委托和数据源。

或者您可以创建UITableViewCell的子类并以编程方式创建表视图。在其中定义表的数据源和委托方法。因此,单元格中的每个表视图都将引用其自己的数据源和委托单元格。另外,每当主表重新加载时,你得到 - (void)prepareForReuse(如果单元格是可重用的)在单元格中重新加载表。

答案 2 :(得分:0)

-tableView:cellForRowAtIndexPath:内,您可以在创建单元格后编写以下代码。

 //if first row & table is not present already
if (indexPath.row == 0 && ![cell.contentView viewWithTag:5]) {

    UITableView *tabellaMenu =
        [[UITableView alloc] initWithFrame:self.contentView.bounds
                                     style:UITableViewStylePlain];    
    tabellaMenu.tag = 5;
    tabellaMenu.dataSource =tabellaMenuDataSource;
    tabellaMenu.delegate = tabellaMenuDelegate;

    [cell.contentView addSubview:tabellaMenu];
  }

答案 3 :(得分:0)

您可以在学习CoreData时获取我创建的项目from here。只需单击导航栏中的“添加”按钮并添加信息并保存即可。然后,您将在主屏幕上的表格中显示数据。只需单击单元格,就会有另一个tableView。

答案 4 :(得分:0)

这是方法:

如果您只在第一个单元格中需要tableView,那么您可以全局使用它,而不是在cellForRowAtIndexPath:方法中进行初始化,因为每次滚动时都会调用它。

UITableView *mainTableView;
UITableView *childTableView;

现在,您可以通过比较其实例来轻松区分delegatesdatasources方法中的两个表格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    if (tableView == mainTableView) {
       // Do code for your main tableView

       if (indexPath.row == 0) {

           [[NSBundle mainBundle] loadNibNamed:@"CellaMenu" owner:self options:NULL];
           cell = cellaMenu;
           cell.selectionStyle = UITableViewCellSelectionStyleNone;
           cell.userInteractionEnabled = NO;

           if (!childTableView) {
               // Initialise only if it is nil (not initialised yet)
               childTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
               childTableView.dataSource = self;
               childTableView.delegate = self;
           }

           [cell.contentView addSubview:childTableView];
       }

    }
    else {
         // Do code for your child tableView
    }

}