我的自定义单元格无法显示

时间:2012-12-13 13:16:02

标签: iphone ios custom-cell

我已经创建了一个包含Label的自定义单元格但是当我在表格视图中添加它而不是它没有显示时,我的视图控制器不是TableViewController我已经使用IB安装了表视图并且设置了它的委托和数据源正确。

我这样做是通过:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    ExampleAppDataObject* theDataObject = [self theAppDataObject];
    return theDataObject.myAudio.count;
}


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        static NSString *CellIdentifier = @"Cell";

        ExampleAppDataObject* theDataObject = [self theAppDataObject];

        NSString *destinationPath = [theDataObject.myAudio objectAtIndex:indexPath.row];

        NSArray *parts = [destinationPath componentsSeparatedByString:@"/"];

        NSString *filename = [parts lastObject];

        AudioInfoCell *cell = (AudioInfoCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {
            cell = [[AudioInfoCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier];
        }

        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        cell.audioName.text = filename;

        return cell;

    }

2 个答案:

答案 0 :(得分:0)

首先检查tableView:numberOfRowsInSection方法

中设置的行数

将自定义单元格设置为下方...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    AudioInfoCell *cell = (AudioInfoCell *) [tableView dequeueReusableCellWithIdentifier:nil];


    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"AudioInfoCell" owner:self options:nil];

        for (id currentObject in topLevelObjects){
            if ([currentObject isKindOfClass:[UITableViewCell class]]){
                cell =  (AudioInfoCell *) currentObject;
                break;

            }
        }
    }

    ExampleAppDataObject* theDataObject = [self theAppDataObject];

    NSString *destinationPath = [theDataObject.myAudio objectAtIndex:indexPath.row];

    NSArray *parts = [destinationPath componentsSeparatedByString:@"/"];

    NSString *filename = [parts lastObject];

    cell.audioName.text = filename;
    return cell;
}

答案 1 :(得分:0)

要检查两件事:

  1. 确保重用标识符与Interface Builder
  2. 中的标识符匹配
  3. 确保您的numberOfRowsInSectionnumberOfSectionsInTableView 返回正确的数字
  4. 另外 - 我不使用:

    if (cell == nil) {
            cell = [[AudioInfoCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier];
    }
    

    用于实例化单元格。应该在您实现的AudioCell TableViewCell子类中处理这个问题。我如何实现这种自定义单元格的示例是:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"FlightPickerCell";
        FlightPickerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        cell.tripIDLabel.text = @"Some TripID";
        cell.hospitalLabel.text = @"Some Hospital";
        cell.cityLabel.text = @"Some City";
        return cell;
    }