UITableView自定义单元格未显示

时间:2010-12-28 20:41:13

标签: objective-c ios4 uitableview

我有一个UITableViewController,它有两个IBOutlet到两个不同的UITableViewCell,它们是在IB中制作的。但是它们没有出现在tableView中。如果你能找到错误,我将非常感激。


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *categoryIdentifier = @"Category";
    static NSString *songDetailsCellIdentifier = @"sdci";
    static NSString *socialCellIdentifier = @"sdcssi";
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    switch (indexPath.row) {
        case 0:
            //imageView = [[UIImage alloc] initWithData:imageData];
            //songNameLabel.text = songName;
            //artistNameLabel.text = artistName;
            //albumNameLabel.text = albumName;
            //numberInChartsLabel.text = [[NSString alloc] initWithFormat:@"%d", numberInCharts];
            break;
        case 1:
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:categoryIdentifier] autorelease];
            cell.textLabel.text = [[NSString alloc] initWithFormat:@"Category"];
            cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%@", category];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            break;
        case 2:
            cell.textLabel.text = [[NSString alloc] initWithFormat:@"Preview This Track"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            break;
        case 3:
            cell.textLabel.text = [[NSString alloc] initWithFormat:@"View This Song In iTunes"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            break;
        case 4:
            cell.textLabel.text = [[NSString alloc] initWithFormat:@"View Artist In iTunes"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            break;
        case 5:
            break;
    }
    // Configure the cell...
    if (indexPath.row == 0) {
        songDetailsCell = [[[UITableViewCell alloc] initWithFrame:songDetailsCell.frame reuseIdentifier:songDetailsCellIdentifier] autorelease];
        return songDetailsCell;
    }
    if (indexPath.row == 5) {
        socialCell = [[[UITableViewCell alloc] initWithFrame:socialCell.frame reuseIdentifier:socialCellIdentifier] autorelease];
        return socialCell;

} else if (indexPath.row >= 1 && indexPath.row <=5) { return cell; } return nil; }

2 个答案:

答案 0 :(得分:0)

将开关置于if{indexPath.section}语句中,包括UITableViewCell *cell...

然后下面的其余部分必须是indexPath.section,而不是indexPath.row

if(indexPath.section==0) {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    switch (indexPath.row) {
        case 0:

....


 if (indexPath.section == 1) {
    songDetailsCell = [[[UITableViewCell alloc] initWithFrame:songDetailsCell.frame reuseIdentifier:songDetailsCellIdentifier] autorelease];
    return songDetailsCell;
}


....

遵循这种格式。

答案 1 :(得分:0)

如果我正确阅读,那么系统无法知道您有自定义单元格。您的单元格被分配并使用UITableViewCell作为类型进行初始化。它们应该是MyCustomCell的类型,或者在Interface Builder中创建它们时所谓的单元格对象。

因此,您将在代码的这一部分中引用您的单元格而不是UITableViewCell:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

Pragmatic Studio在制作自定义表格单元格时有一个great, free screencast。它在Interface Builder中称为自定义表格单元格。大约20分钟。