当我设置initwithstyle:UItableviewsubtitle时,UITableViewCell不显示字幕

时间:2014-03-10 06:05:49

标签: ios iphone uitableview

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellidenti = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:cellidenti];

    if(cell == Nil)
    {
        cell= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidenti];
    }
    cell.textLabel.text = isActive?searchData[indexPath.row]:tableData[indexPath.row];
    cell.detailTextLabel.text = isActive?searchNumberData[indexPath.row]:tableNumberData[indexPath.row];   
    return cell;
}

我没有得到完美的观点,我没有使用故事板。

4 个答案:

答案 0 :(得分:3)

您没有使用可重用单元格实例的正确方法,也使用静态单元格标识符。所以有关更多信息,请参阅编辑部分中的以下代码....

-UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellidenti = @"Cell";// edited here.....
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidenti];// edited here

    if(cell == Nil)
    {
        cell= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidenti];
    }
    cell.textLabel.text = isActive?searchData[indexPath.row]:tableData[indexPath.row];
    cell.detailTextLabel.text = isActive?searchNumberData[indexPath.row]:tableNumberData[indexPath.row];   
    return cell;
}

答案 1 :(得分:1)

此行中出现错误UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:cellidenti];这将返回UIView,而不是UITableviewCell。相反,你可以使用下面的行。

[tableView dequeueReusableCellWithIdentifier:cellidenti];

答案 2 :(得分:1)

我在代码中观察到的两件事

1)使用correct way of cell reusability使用dequeueReusableCellWithIdentifier(正如其他人已建议的那样)。另请参阅使用dequeueReusableCellWithIdentifier:forIndexPath:的单元here的可重用性的另一种方法。

2)尝试使用nil代替Nil。看看this thread

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellidenti = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidenti];

    if(cell == nil)
    {
        cell= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidenti];
    }
    cell.textLabel.text = isActive?searchData[indexPath.row]:tableData[indexPath.row];
    cell.detailTextLabel.text = isActive?searchNumberData[indexPath.row]:tableNumberData[indexPath.row];   
    return cell;
}

答案 3 :(得分:0)

USe dequeueReusableCellWithIdentifier用于创建重用实例