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

bir*_*age 2 xcode objective-c uitableview ios

我在使用自定义滑动删除按钮时遇到问题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;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

gal*_*ito 7

那是因为你没有添加UILabel作为的一个子视图contentViewUITableViewCell,要添加它的子视图UITableViewCell本身.

如果要子类化UITableViewCell并向其添加子视图,则应始终将它们添加到contentView单元格中.

这是来自Apple的UITableViewCell文档:

如果要超出预定义样式,可以将子视图添加到单元格的contentView属性.

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

更新:

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

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

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

现在,改变-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;
}
Run Code Online (Sandbox Code Playgroud)

您可以看到,-dequeueReusableCellWithIdentifier如果您事先注册,则已自动为您加载NIB.