我试图做一些事情,但既没有在网上找到一些例子,也不知道是否有可能。
我需要以编程方式将一个表添加到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表格,但我需要它们来创建自定义处理程序。 任何提示?
答案 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;
现在,您可以通过比较其实例来轻松区分delegates
和datasources
方法中的两个表格。
- (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
}
}