#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. hdu 4815 Little Tiger vs. Deep Monkey(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=4815 Description A crowd of little animals is visiting a m ...

  2. 数据库:mongodb与关系型数据库相比的优缺点

      与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精 ...

  3. 访问ControlTemplate内部的元素

    需要用到code behind 注意要给需要访问的元素命名x:Name="PART_TextBlock" <ResourceDictionary xmlns="ht ...

  4. 使用XCopy发布网页

    链接:https://documentation.devexpress.com/#eXpressAppFramework/CustomDocument113245 In this lesson, yo ...

  5. STL 速解

    STL(Standard Template Library)是C++的标准模版库. STL概述 STL的一个重要概念是数据结构和算法的分离,这使得STL变得十分通用.例如:由于STL的sort()函数 ...

  6. 移动端类似IOS的滚动年月控件(需要jQuery和iScroll)

    一. 效果图 二. 功能介绍 支持滚动和点击选择年月.(目前只支持设置年月的最大最小值,不支持整体的最大最小值) 三. 代码 1. 在你的html中添加如下代码: 直接加载<body>里面 ...

  7. EasyMock 使用方法与原理剖析

    from:http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/ Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一 ...

  8. This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分 解决方案

    但web启用了md5加密后 有可能出现这样的错误 This implementation is not part of the Windows Platform FIPS validated cryp ...

  9. 简短介绍 C# 6 的新特性 .net 6都要来了?

    几周前我在不同的地方读到了有关C#6的一些新特性.我就决定把它们都收集到一起,如果你还没有读过,就可以一次性把它们都过一遍.它们中的一些可能不会如预期那样神奇,但那也只是目前的更新. 你可以通过下载V ...

  10. C# 程序员最常犯的 10 个错误

    关于C# C#是达成微软公共语言运行库(CLR)的少数语言中的一种.达成CLR的语言可以受益于其带来的特性,如跨语言集成.异常处理.安全性增强.部件组合的简易模型以及调试和分析服务.作为现代的CLR语 ...