滑动删除按钮位于自定义UITableViewCell文本下

时间:2014-07-19 11:20:35

标签: ios objective-c xcode uitableview

我在使用自定义UITableViewCell的滑动删除按钮时遇到问题。当我滑动它时,删除按钮位于单元格中的文本下方。您可以在下面看到我正在使用的图像和代码。

注意:我在xib中绘制tableviewcell。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }
}

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

    HareketCell *cell = (HareketCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"HareketCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];

    [cell.lblDakika setText:[NSString stringWithFormat:@"%@%@", [[arrProgramim objectAtIndex:indexPath.row]valueForKey:@"dakika"], @" dk"]];

    [cell.imgThumbnail setImage:[UIImage imageNamed:@"most_harita_icon.png"]];

    return cell;
}

enter image description here

2 个答案:

答案 0 :(得分:7)

这是因为您没有将UILabel添加为contentView UITableViewCell的子视图,而是将其添加为UITableViewCell本身的子视图。

如果您要为UITableViewCell创建子类并向其添加子视图,则应始终将其添加到单元格的contentView内。

这是来自Apple的UITableViewCell文档:

  

如果您想超越预定义的样式,可以将子视图添加到单元格的 contentView 属性。

如果您这样做,iOS会自动调整contentView内的所有内容,以显示删除按钮并且没有任何重叠。

<强>更新

从下面的评论中,单元格是在单独的.xib上创建的,因此标签已经是单元格contentView的子视图

问题是在-tableView:cellForRowAtIndexPath:中加载NIB。例如,您必须事先在-viewDidLoad中在表视图上注册NIB。像这样:

- (void)viewDidLoad {
    // Assuming the xib is named HareketCell.xib
    UINib *nib = [UINib nibWithNibName:@"HareketCell" bundle:nil];
    [self.tableView registerNib:nib forCellReuseIdentifier:@"HareketCell"];
}

现在,为此改变-tableView:cellForRowAtIndexPath:

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

    HareketCell *cell = (HareketCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    [cell.lblDakika setText:[NSString stringWithFormat:@"%@%@", [[arrProgramim objectAtIndex:indexPath.row]valueForKey:@"dakika"], @" dk"]];

    [cell.imgThumbnail setImage:[UIImage imageNamed:@"most_harita_icon.png"]];

    return cell;
}

您看,如果您事先注册,-dequeueReusableCellWithIdentifier已自动为您加载NIB。

答案 1 :(得分:0)

我认为这可能是因为你的标签太长了...保持你的标签短,然后尝试..我认为在你的标签短,你没有看到删除按钮上的标签重叠。如果您无法找到答案,您可以随时使用名为SWTableViewCell的第三方库,可在此处找到https://github.com/CEWendel/SWTableViewCell