我有这段代码
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
Song *song = [self.music objectAtIndex:indexPath.row];
cell.textLabel.text = song.title;
cell.detailTextLabel.text = song.artist;
return cell;
我没有使用Interface Builder。我怎么能让这个单元格有副标题?我得到的只是标准单元格。
答案 0 :(得分:9)
有两种方法:
旧式方法是不注册任何类,NIB或单元格原型,在没有dequeueReusableCellWithIdentifier
的情况下调用forIndexPath
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
Song *song = self.music[indexPath.row];
cell.textLabel.text = song.title;
cell.detailTextLabel.text = song.artist;
return cell;
}
正如我们在别处讨论的那样,这假定您没有为该重用标识符注册一个类。
另一种方法是在viewDidLoad
注册您自己的课程:
[self.tableView registerClass:[MyCell class] forCellReuseIdentifier:@"Cell"];
然后使用 dequeueReusableCellWithIdentifier
选项调用forIndexPath
,但会丢失手动测试的代码nil
(因为它永远不会是{{1} }}):
nil
这显然假设你已经实现了一个包含副标题的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
Song *song = self.music[indexPath.row];
cell.textLabel.text = song.title;
cell.detailTextLabel.text = song.artist;
NSLog(@"title=%@; artist=%@", song.title, song.artist); // for diagnostic reasons, make sure both are not nil
return cell;
}
子类(注意我覆盖了样式):
UITableViewCell
就我个人而言,我认为设计一个单元原型(自动注册重用标识符并处理所有其他东西)要容易得多。即使是注册NIB的旧技术也比上述更容易。但如果你想完全以编程方式完成,那就是两种方法。
答案 1 :(得分:1)
试试这段代码:
UITableViewCell *cell= [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell==nil) {
// you cans set subtitle using this way
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
Song *song = [self.music objectAtIndex:indexPath.row];
cell.textLabel.text = song.title;
cell.detailTextLabel.text = song.artist;
return cell;
答案 2 :(得分:0)
在你的cellForRowAtIndexPath方法中试试这个
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
希望它有所帮助。