dequeueReusableCellWithIdentifier中的字幕

时间:2015-08-13 13:05:11

标签: ios objective-c uitableview tableviewcell

我有这段代码

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。我怎么能让这个单元格有副标题?我得到的只是标准单元格。

3 个答案:

答案 0 :(得分:9)

有两种方法:

  1. 旧式方法是不注册任何类,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;
    }
    

    正如我们在别处讨论的那样,这假定您没有为该重用标识符注册一个类。

  2. 另一种方法是在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
  3. 就我个人而言,我认为设计一个单元原型(自动注册重用标识符并处理所有其他东西)要容易得多。即使是注册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];

希望它有所帮助。