辅助披露指示器未显示在自定义单元格中

5

我正在创建一个带有自定义单元格的表视图。我使用xib文件来创建它们。我的表格按照我的要求执行,但只有一个问题:表视图的单元格没有显示披露指示器。

在属性检查器中设置后,xib文件中显示了指示器,但模拟器中没有显示。

我也尝试通过编程方式添加指示器。

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

InboxTableViewCell * cell = (InboxTableViewCell *)[tableView            dequeueReusableCellWithIdentifier:[InboxTableViewCell reuseIdentifier]];


   if (cell == nil)
   {
       [[NSBundle mainBundle] loadNibNamed:customCellName owner:self options:nil];
       cell = _tblVIewInboxCell;
       _tblVIewInboxCell = nil;
   }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.lblTitleInbox.text = @"Title";
    cell.lblSubTitleInbox.font = [UIFont fontWithName:@"Verdana" size:16.0];
    cell.lblSubTitleInbox.text = @"SubTitle";
    cell.lblSubTitleInbox.font = [UIFont fontWithName:@"Verdana" size:12.0];

  return cell;
}

所以能否有人帮助我。

提前感谢。


确保单元格的宽度不超过320。遇到过类似问题。 - Sreejith
我也检查过了,我把它设为300以确保安全,但仍然无法工作。 - vaibhav
5个回答

16

13

我有同样的问题,但最终发现是我实现了layoutSubviews方法,但在子类中忘记调用super.layoutSubviews。如果你把它加回去,那么就可以看到披露。

因此解决方案将会是这样的:

class WQPlaneCell: UITableViewCell {

    @IBOutlet private weak var thumbnailImage: UIImageView!
    @IBOutlet private weak var planeNoLabel: UILabel!
    @IBOutlet private weak var planeTypeLabel: UILabel!
    @IBOutlet private weak var ownerLabel: UILabel!

    override func layoutSubviews() {
        super.layoutSubviews() // This is important, don't forget to call the super.layoutSubviews 
        .... // do anything you want
    }
}

除了你的方法,其他什么都没用。谢谢。 - Abdul Waheed
这救了我的命 :) - Rajesh

4
我遇到了类似的问题;我已经将单元格内的所有元素(标签、图像)的约束添加到了单元格边界,但仍然没有显示最右边的元素和披露指示器。
结果发现您还必须为父表视图添加约束,以使其适应其超级视图。接口故事板/自动布局不会对此发出任何警告。
这只适用于自定义 TableView。TableViewController 已经解决了这个问题,因此如果您从后者转移到前者,则很容易忽略它。

1

我在Interface Builder中为表格视图设置了附件指示器,但遇到了同样的问题。我可以通过在tableView(cellForRowAt:)中以编程方式设置来解决这个问题。此外,您可以像这样仅为某些表格视图单元格设置附件指示器:

if indexPath.row != 3 {
    cell.accessoryType = .disclosureIndicator
    }

-1

试试这个

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;

}

1
正如我在问题中所说,我正在使用自定义单元格,因此无法使用tableView。为了测试目的,我尝试了您的答案,但它并没有起作用。 - vaibhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接