通过点击左侧的删除控件而不是右侧的显示删除按钮直接删除UITableViewCell

时间:2015-05-13 02:21:09

标签: ios uitableview uiscrollview edit

当我涉及[tableView setEditing:YES animated:YES]时,删除左侧每个单元格上的控件显示,我想要做的是在我点击删除控件时获取事件,并直接删除单元格但不显示删除按钮右。

我知道苹果的标准方法是在右侧显示删除按钮,当我点击它时,数据源的

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

参与,我不想这样做的原因是我的单元格是由scrollview定制的,水平滚动所以滚动显示删除按钮会使它变得一团糟,所以我不会实现

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

在我的数据源中。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你做的一种方法是,自定义单元格并按照自己的方式删除单元格,例如,

创建一个新的自定义单元格,将UITableviewCell命名为类似CustomCellTableViewCell的名称 在CustomCellTableViewCell.h中定义委托方法,例如

 #import <UIKit/UIKit.h>

 @class CustomCellTableViewCell;
 @protocol CellDelegate <NSObject>
 - (void)deleteCell:(CustomCellTableViewCell *)cell;
 @end


 @interface CustomCellTableViewCell : UITableViewCell
 + (CustomCellTableViewCell *)createCell;
 @property (weak, nonatomic) IBOutlet UIButton *deleteButton;
 @property (weak, nonatomic) IBOutlet UILabel *descriptionLabel;
 @property (weak,nonatomic)  id<CellDelegate> cellDelegate;
 - (IBAction)deleteAction:(id)sender;
 - (void)showDeleteButton;
 - (void)hideDeleteButton;
 @end

并在CustomCellTableViewCell.xib中添加一个按钮并设置标签连接到deleteButtondescriptionLabel

<{1>}文件中的

CustomCellTableViewCell.m

并在控制器 #import "CustomCellTableViewCell.h" @implementation CustomCellTableViewCell - (void)awakeFromNib { // Initialization code } - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if(self) { self = [CustomCellTableViewCell createCell]; } return self; } + (CustomCellTableViewCell *)createCell { NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CustomCellTableViewCell" owner:nil options:nil]; if ([arrayOfViews count] < 1) { return nil; } for (id item in arrayOfViews) { if([item isKindOfClass:[UITableViewCell class]]) return item; } return nil; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (IBAction)deleteAction:(id)sender { if([self.cellDelegate respondsToSelector:@selector(deleteCell:)]) { [self.cellDelegate deleteCell:self]; } } - (void)showDeleteButton { CGRect destRect = self.descriptionLabel.frame; destRect.origin.x += 80; [UIView animateWithDuration:0.3 animations:^{ self.descriptionLabel.frame = destRect; }]; } - (void)hideDeleteButton { CGRect destRect = self.descriptionLabel.frame; destRect.origin.x = 0; [UIView animateWithDuration:0.3 animations:^{ self.descriptionLabel.frame = destRect; }] ; } @end 文件中

.m

尝试新项目你会得到它

答案 1 :(得分:0)

你可以使用UIViewController

来实现这个目标

tableview

中添加tableviewcellUIViewController

我使用swift实现同样的目标。它会告诉您如何在Objective-C

中进行操作

以下是代码:

var data:[String] = ["One","Three","Four","Five","Six"]
@IBOutlet var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.rightBarButtonItem = self.editButtonItem()
    // Do any additional setup after loading the view, typically from a nib.
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell

    cell.textLabel.text = self.data[indexPath.row]

    if editing
    {
        cell.imageView.image = UIImage(named: "Button-Delete-icon.png")
    }
    else
    {
        cell.imageView.image = UIImage(named: "")
    }
    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if editing
    {
        self.data.removeAtIndex(indexPath.row)
        self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
    }
}

override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
        self.tableView.reloadData()
}

希望它会帮助