我无法将CustomTableViewCell
UITableViewCell
的子类显示在我的表格视图中。
我使用xib来表示该单元格,但我假设数据源委托的代码不会更改。我确保在表视图单元格XIB中设置相同的重用标识符。
我将问题隔离到返回表格单元格的数据源方法无法正常工作的事实,这里是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
DataObject *foo = [self.dataArray objectAtIndex:indexPath.row];
if (cell == nil)
{
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[[cell overview] setText:foo.overview];
[[cell price] setText:foo.price];
NSLog(@"cell initialized, description text is %@",cell.overview.text);
return cell;
}
不确定为什么这不起作用,但是最后一个日志语句总是在末尾打印一个(null),是的我确实验证了数据对象的overview
属性中有一个有效的字符串。 price
也是如此。
答案 0 :(得分:4)
1)将自定义单元格类分开
2)XIB:文件所有者类更改为NSObject
3)XIB:UITableViewCell更改为MyTableViewCell
4)您希望将内部表视图代码添加为
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"MyCell";
MyTableViewCell *cell = (MyTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *arrayCellXib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell"
owner:self
options:nil];
if (indexPath.row == 0) {
// first table cell
cell = [arrayCellXib objectAtIndex:0]; // *
......
}else {
cell = [arrayCellXib objectAtIndex:1]; // *
}
...
}
return cell;
}
索引0,1处的对象是您在xib中创建MyTableViewCell的顺序的索引,如果您想要有多个自定义单元格。表示在MyTableViewCell类中,您可以根据需要创建无限制的自定义单元格并使用。
通常,只需在XIB中创建一个自定义单元格,然后执行以下操作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int thisRow = indexPath.row;
NSString *exampleText = [yourData objectAtIndex:thisRow];
static NSString *CellID = @"cu5";
FancyCell *cell =
(FancyCell *)[tableView dequeueReusableCellWithIdentifier:CellID];
if (cell == nil)
{
NSArray *cellTeam =
[[NSBundle mainBundle] loadNibNamed:@"FancyCell"
owner:self options:nil];
cell = [cellTeam objectAtIndex:0];
}
[cell someFunction:exampleText];
[cell.someLabel setText:exampleText];
return cell;
}
希望可以帮助你:)
答案 1 :(得分:1)
在.h文件中,你写它。
IBOulet CustomTableViewCell *tableCell;
并连接到CustomTableViewCell的.xib文件中的文件所有者。
您可以在(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
cell = tableCell;
}
我认为这会对你有所帮助。