#import <UIKit/UIKit.h>

@class ZSDCustomCell;

//协议

@protocol ZSDCustomCellDelegate <NSObject>

//判断选择某行以及某行中的按钮

-(void)deleteDidSelectCell:(ZSDCustomCell *)customCell andClickButton:(int)selectButtonIndex;

@end

@interface ZSDCustomCell : UITableViewCell<UIGestureRecognizerDelegate>

//显示内容的label标签

@property (weak, nonatomic) IBOutlet UILabel *contentLabel;

//右边红色的view

@property (weak, nonatomic) IBOutlet UIView *rightView;

//删除按钮

@property (weak, nonatomic) IBOutlet UIButton *deleteBtn;

//代理

@property(weak,nonatomic)id<ZSDCustomCellDelegate>delegate;

@end

#import "ZSDCustomCell.h"

@implementation ZSDCustomCell

-(void)awakeFromNib

{

//左滑动

UISwipeGestureRecognizer *swipeLeft=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipe:)];

//右滑动

UISwipeGestureRecognizer *swipeRight=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipe:)];

//单击手势

//    UITapGestureRecognizer *singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];

[swipeLeft setNumberOfTouchesRequired:1];

[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];

[swipeRight setNumberOfTouchesRequired:1];

[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

//[self addGestureRecognizer:singleTap];

[self addGestureRecognizer:swipeLeft];

[self addGestureRecognizer:swipeRight];

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state

}

-(void)handleSwipe:(UISwipeGestureRecognizer *)gesture

{

//如果是向左滑,显示右边的view

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft)

{

[UIView animateWithDuration:1.0 animations:^{

[self.deleteBtn addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

self.rightView.hidden=NO;

}];

}

//如果是向右滑,隐藏右边的view

else if (gesture.direction==UISwipeGestureRecognizerDirectionRight)

{

[UIView animateWithDuration:1.0 animations:^{

self.rightView.hidden=YES;

}];

}

}

//按钮事件

-(void)buttonAction:(UIButton *)sender

{

if (_delegate&&[_delegate respondsToSelector:@selector(deleteDidSelectCell:andClickButton:)])

{

[_delegate deleteDidSelectCell:self andClickButton:(int)sender.tag];

}

}

/*

- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer

{

[UIView animateWithDuration:0.5 animations:^

{

self.rightView.hidden=NO;

}];

}

*/

@end

#import <UIKit/UIKit.h>

@interface ZSDViewController : UIViewController

@end

#import "ZSDViewController.h"

#import "ZSDCustomCell.h"

@interface ZSDViewController ()<UITableViewDataSource,UITableViewDelegate,ZSDCustomCellDelegate>

@property(nonatomic,strong)NSMutableArray *dataArray;

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

@implementation ZSDViewController

#pragma mark - life circle

- (void)viewDidLoad

{

[super viewDidLoad];

//已经在storyboard上进行设置代理,这里不需要在写

//_myTableView.dataSource=self;

//_myTableView.delegate=self;

self.myTableView.separatorStyle=UITableViewCellSeparatorStyleSingleLine;

for (int i=0; i<10; i++)

{

[[self dataArray] addObject:[NSString stringWithFormat:@"%d",i]];

}

// Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - private

-(NSMutableArray *)dataArray

{

if (_dataArray==nil)

{

_dataArray=[NSMutableArray array];

}

return _dataArray;

}

#pragma  mark - UITableViewDataSource

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return _dataArray.count;

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

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

{

ZSDCustomCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

cell.delegate=self;

cell.rightView.hidden=YES;

cell.selectionStyle = UITableViewCellSelectionStyleNone;

cell.deleteBtn.tag=indexPath.row;

cell.contentLabel.text=_dataArray[indexPath.row];

cell.tag=indexPath.row;

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

return 80;

}

#pragma mark - ZSDCustomCellDelegate

-(void)deleteDidSelectCell:(ZSDCustomCell *)customCell andClickButton:(int)selectButtonIndex

{

int result=selectButtonIndex;

if (customCell.tag==result)

{

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:result inSection:0];

[self.dataArray removeObjectAtIndex:result];

[self.myTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

[self.myTableView reloadData];

}

}

@end

自定义uitableviewcell通过加上滑动手势进行删除对应的行。PS:用代理来实现的更多相关文章

  1. 自定义UITableViewCell实现左滑动多菜单功能LeftSwipe

    今天愚人节,小伙们,愚人节快乐! 实现一个小功能,滑动菜单,显示隐藏的功能菜单, 先上图:                       这里尝试用了下使用三个方式来实现了这个功能: 1.使用自定义UI ...

  2. 自定义UITableViewCell 的delete按钮

    自定义UITableViewCell上的delete按钮 滑动列表行(UITableViewCell)出现删除按钮时,默认是英文“delete”,这份代码片段能够将“delete”变成中文”删除“,甚 ...

  3. 如何得到自定义UITableViewCell中的按钮所在的cell的indexPath.row

    在自定义UITableViewCell中创建了一个按钮. 想在点击该按钮时知道该按钮所在的cell在TableView中的行数.就是cell的 indexPath.row两种方法都很好.-(IBAct ...

  4. ios滑动手势全屏(这段代码实现了下一级控制器滑到上一级控制器)

    在自定义导航控制器里面加以下代码就增加全屏滑动手势 >推向前一个控制器 //  HBNavigationController.m // #import "HBNavigationCon ...

  5. 新手教程之使用Xib自定义UITableViewCell

    新手教程之使用Xib自定义UITableViewCell 前言 首先:什么是UITableView?看图 其次:什么是cell? 然后:为什么要自定cell,UITableView不是自带的有cell ...

  6. 自定义UITableViewCell的方法

    1.纯XIB/storyboard自定义.对应一个Controller的storyboard上拖拽出一个自定义Cell,并加上ReuseIdentifitor 2.纯代码自定义,通过在contentV ...

  7. 解决嵌套在ScrollView中的TableView滑动手势冲突问题

    最近在迭代开发公司项目的时候遇到了一个问题,在可以左右切换标签视图的ScrollView中嵌套了两个TableView用于展示视图,感觉一切so easy的情况下,问题出现了,因为左右两个视图既可以实 ...

  8. 【转】自定义UITableViewCell(registerNib: 与 registerClass: 的区别)

    自定义UITableViewCell大致有两类方法: 使用nib 1.xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2.调用 tableVi ...

  9. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

随机推荐

  1. C# winform只有一个进程

    在做winform程序的时候,有时候需要客户只能起一个进程,不能起多个进程,用如下代码可以实现. internal static class Program { private static Mute ...

  2. USB -- scsi命令集

    摘自:<圈圈教你玩usb> 241页 SCSI(small computer system interface)是小型计算机系统的缩写,有一套完整的协议规定其命令和命令数据的响应.scsi ...

  3. HDU1002大数加法

    大数加法 c++版: #include <map> #include <set> #include <stack> #include <queue> # ...

  4. jpa 支持(sql)JDBC标准语句

    =====================dao================================ package com.jb.xs.Dao.impl; import java.uti ...

  5. SNMP MIB中的含read-create节点的表的实现

    做过snmp/mib开发的知道,常见的节点类型一般只有no-accessible,read-only,read-write三种访问类型.snmp V2中引入了一种新的访问类型:read-create. ...

  6. text输入框中按下enter键时阻止刷新页面

    1.在js中加入一个方法: function judge_enter(){ if(window.event.keyCode==13){ return false;//阻止页面刷新的作用 } } 2.然 ...

  7. thinkphp 3+ 观后详解 (2)

    接上一章的内容,我们继续来看Think.class.php文件的start方法 static public function start() { // 注册AUTOLOAD方法 spl_autoloa ...

  8. 全代码实现ios-3

    决定做ios开发的时候,看了很多本关于ios开发的书籍,其中有国内的人写的,也有根据外国的书翻译过来的. 很可惜,这些书里的例子没办法照搬过来,因为Xcode更新换代太快了,而这些书本的内容更新的速度 ...

  9. C++的优秀特性1:引用

    (转载请注明原创于潘多拉盒子) 一本典型的C语言教科书的厚度大约是200页左右,而一本典型的C++教科书的厚度至少要500页.比如K&R的<The C Programming Langu ...

  10. CSS Gradient文字效果

    你想创建的标题没有渲染和Photoshop每个标题吗?这里是一个简单的CSS技巧向您展示如何创建渐变文字效果,PNG图像(纯CSS,没有Javascript或Flash).你所需要的是一个空的< ...