自定义删除按钮在UITableView单元格中编辑

时间:2009-10-23 19:32:44

标签: iphone uitableview

我已经完成了显示以下代码的this question

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"Sagar";
}

如果我想要自定义图像而不是默认的红色按钮怎么办?

4 个答案:

答案 0 :(得分:34)

在自定义单元格中实现此方法

- (void)willTransitionToState:(UITableViewCellStateMask)state{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
                UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
                [deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
                [[subview.subviews objectAtIndex:0] addSubview:deleteBtn];
                [deleteBtn release];
            }
        }
    }
}

答案 1 :(得分:7)

这是一个迟到的回复,但我希望有人可能会觉得这很有帮助。所以接受的答案对我来说似乎有点复杂,@ user1684899的答案只有在您只想更改删除按钮的外观时才有效。我想彻底改变删除按钮的外观(即它的框架,位置等),所以我的解决方案是将我自己的删除按钮添加到我的自定义单元格并保持最初隐藏,并且仅在单元格显示时显示在编辑模式下。更重要的是,我想隐藏iOS的原始删除按钮并支持向后兼容性,这是我的诀窍:

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
    {
        if (!IS_IOS_7){
            for (UIView *subview in self.subviews)
            {
                if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
                {
                    // hide original button
                    [[subview.subviews objectAtIndex:0] setHidden:YES];
                    // show my custom button
                    [self.deleteButton setHidden:NO];
                }
            }

        } else {
            for (UIView *subview in self.subviews) {
                for (UIView *subview2 in subview.subviews) {
                    if ([NSStringFromClass([subview2 class]) rangeOfString:@"Delete"].location != NSNotFound) {
                        // hide original button
                        [subview2 setHidden:YES];
                        // show my custom button
                        [self.deleteButton setHidden:NO];
                    }
                }
            }
        }
    } else {
        // hide my custom button otherwise
        [self.deleteButton setHidden:YES];
    }
}

不要忘记添加:

[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];
<{1>}中的

,以便您可以在点击删除按钮时添加所需内容。这是我的结果:

enter image description here

答案 2 :(得分:1)

正如你在luvieere的答案评论中所说的那样,系统范围内的预期列表潜入行动标准将是使用细节披露(蓝色圆圈箭头)单元格附件,而不是滑动手势。

也就是说,如果您仍然想要使用滑动操作,则无法在不手动拦截和完全重新实现滑动手势的情况下提供您自己的按钮,就像Tweetie所做的那样。

答案 3 :(得分:0)

luvieere是对的 - 如果你想要同样的“删除”比喻,你想把它保存在Apple提供的红色按钮上。为什么改变它?它的全局可识别为删除按钮的标准

虽然,如果你想要像Tweetie这样的东西,完全改变了滑动的行为,你可以使用像你自己的视图中绘制的ABTableViewCell之类的东西。创建自定义表视图,覆盖-touchesBegan:withEvent:,并检查触摸。计算两个触摸的增量(在touchesMoved:withEvent :)并移动您自己的视图。