objective-c UITableview 自定义滑操(原创)
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
滑动删除在当前的ios版本中已经支持了,但是遇到复杂的比如,滑动后的功能有多个,并不是删除功能,那么你就得自己写,我说得没错吧..........
其实关于滑删嘛,在以前的项目中也遇到过,当时ios还不支持滑删,所以只有看自己的了,当时我是在code4app上下的案例修改的,所以此功能以前也做好过,但是可悲的是android那边的程序员在网上下来案例后修改不出项目需求效果,固这个功能最后被项目经历是阉割了。。。。。
岁月如梭,公司已换了多个呵呵.....
当前公司这个项目又涉及到cell滑动功能操作,虽然当前ios已自带了滑动删除,但是他并不能完全满足当前项目要求,所以又得看自己得了,这次我没打算去网上下案例,因为这个项目时间并不那么紧迫,所以就自己写了哦。。。。。。。。。。 (下面进入主题)
今天我给大家讲解的重点是我实现这个功能的思路,想让大家理解的也是我实现的思路, 当我用这个思路实现这个功能后,再想想上次做这个功能时,从网上下那案例是多么的不值得我留恋.....
先贴图我公司实现的功能如下:

懂的人都知道,一看这玩意用ios自带的滑操是不行的呵呵
首先内容展示的控件是UITableView
三个cell其实是一个cell的三种不同状态,如果这个你都不知道,你下面就别继续看了...
第一个为选中状态:就是用户要提交的地址
第二个为没选中状态:
第三个就是我们cell滑动后出现的效果,当这部分功能滑动出现后,我们需要隐藏掉小圆圈button
下面就是我这篇文章要讲的重点了
cell中展示的每一个控件,都是add 到一个scrollview中,然后将scrollview add到cell中
cell滑动后展示的宽度(70就是cell滑动后延伸的宽度),需要增加到scrollview的 contentsize中去.下面是代码
UIScrollView *ContentView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, DEVICE_Width , 79)];
[ContentView setContentSize:CGSizeMake(DEVICE_Width+70,79 )];
[ContentView setBackgroundColor:[UIColor whiteColor]];
[ContentView setShowsHorizontalScrollIndicator:NO];
ContentView.scrollEnabled=YES;
先将scrollview的代理引入 <UIScrollViewDelegate>
然后需要实现下面的代理:
//ScrollView代理
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
_recordCurrentOffsetX=scrollView.contentOffset.x; } //拖拽开始和腿拽结束,这两个代理都必须加上,否则无法执行enddragging
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{ } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
NSArray *backGroundViewChilrendArray=scrollView.subviews; if (_recordCurrentOffsetX<70) {
[scrollView setContentOffset:CGPointMake(0, scrollView.contentOffset.y) animated:YES]; for (int i=0;i<backGroundViewChilrendArray.count; i++) {
if ([[backGroundViewChilrendArray objectAtIndex:i] isKindOfClass:[UIButton class]]) {
UIButton *button=[backGroundViewChilrendArray objectAtIndex:i] ;
if (button.tag==11010) {
button.hidden=NO;
break; }
}
} }
else
{ for (int i=0;i<backGroundViewChilrendArray.count; i++) {
if ([[backGroundViewChilrendArray objectAtIndex:i] isKindOfClass:[UIButton class]]) {
UIButton *button=[backGroundViewChilrendArray objectAtIndex:i] ;
if (button.tag==11010) {
button.hidden=YES;
break; }
}
}
} } } - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{ }
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSArray *backGroundViewChilrendArray=scrollView.subviews; if (_recordCurrentOffsetX<70) {
[scrollView setContentOffset:CGPointMake(0, scrollView.contentOffset.y) animated:YES]; for (int i=0;i<backGroundViewChilrendArray.count; i++) {
if ([[backGroundViewChilrendArray objectAtIndex:i] isKindOfClass:[UIButton class]]) {
UIButton *button=[backGroundViewChilrendArray objectAtIndex:i] ;
if (button.tag==11010) {
button.hidden=NO;
break; }
}
} }
else
{ for (int i=0;i<backGroundViewChilrendArray.count; i++) {
if ([[backGroundViewChilrendArray objectAtIndex:i] isKindOfClass:[UIButton class]]) {
UIButton *button=[backGroundViewChilrendArray objectAtIndex:i] ;
if (button.tag==11010) {
button.hidden=YES;
break; }
}
}
} }
if (_recordCurrentOffsetX<70) {}
_recordCurrentOffsetX:是一个记录uiscrollview偏移量x坐标的cgfloat变量字段
上面这句代码是判断当前scrollview偏移量的 ,上面代码中的 <70 ------ 70就是我们uiscrollview增加出的那部分偏移量宽度 存放滑删功能的部分。
如果偏移量小于70了,我们就将偏移量设置为0,不展示出滑动删除部分
for (int i=0;i<backGroundViewChilrendArray.count; i++) {
if ([[backGroundViewChilrendArray objectAtIndex:i] isKindOfClass:[UIButton class]]) {
UIButton *button=[backGroundViewChilrendArray objectAtIndex:i] ;
if (button.tag==11010) {
button.hidden=NO;
break;
}
}
上面一部分代码是当执行完uiscrolview代理后,我们根据是否显示了滑操扩展部分来隐藏或显示 小圆圈按钮.
最开始我用了手势来做这个功能,cell add的是UIView,不是scrollview,然后给UIView增加相应的手势, 逻辑相对复杂,做出来之后有一个bug,就是当我上拉下拉这个uitableview刷新时(根本不怎么执行,而是执行contentview上绑定的手势),如果我将border的宽度设置为0,那么就完全不执行了,为什么我想我不说各位也知道。而且以前我下那案例也是用手势写的,那个案例虽然解决了,我用手势的困惑,但是体验完全不好,而且cell上add了很多层,实现代码之多。。。。我今天讲的重点就是:当项目涉及到自己写cell的滑操功能时,可选我这思路,只需要在UITableView的每个cell中add一个UIScrollView,然后将所有展示的内容控件都add到scrollview上,然后将滑动多出的宽度,增加到UIScrollView的contensize中去,再调几个代理 就完全搞定呵呵.....(此cell滑操方法我当前好像还没见网络上有人使用过,大多是使用手势)
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

objective-c UITableview 自定义滑操(原创)的更多相关文章
- iOS UITableView左滑操作功能的实现(iOS8-11)
WeTest 导读 本文主要是介绍下iOS 11系统及iOS 11之前的系统在实现左滑操作功能上的区别,及如何自定义左滑的标题颜色.字体大小. 一.左滑操作功能实现 1.如果左滑的时候只有一个操作按钮 ...
- UItableView自定义标题(headerView)重用问题
在实现类似QQ列表的功能时,这样自定义了一个标题headerView 在实现类似QQ列表的功能时,这样自定义了一个标题headerView - (UIView *)tableView:(UITable ...
- 【转】iOS 通过xib自定义UITableViewCell【原创】
原文网址:http://blog.it985.com/9683.html 在使用tableView的时候,如果cell的布局过于复杂,通过代码搭建的话不够直观.并且要不停的调整位置,字体什么的.这时, ...
- UITableView自定义单元格
随手笔记: RootViewController代码 #import "RootViewController.h" #import "AddressContact.h&q ...
- iOS开发总结-UITableView 自定义cell和动态计算cell的高度
UITableView cell自定义头文件:shopCell.h#import <UIKit/UIKit.h>@interface shopCell : UITableViewCell@ ...
- iOS探究UITableView的内部代码,仿UITableView自定义
大家都知道UITableView,最经典在于循环利用,这里我自己模仿UITableView循环利用,写了一套自己的TableView实现方案,希望大家看了我的文章,循环利用思想有显著提升. 研究UIT ...
- UITableView(自定义cell)试水心得
初次试水自定义cell的UITableView 实现目标 最终实现结果 界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做table ...
- UITableView自定义Cell中,纯代码编程动态获取高度
在UITableView获取高度的代理方法中,经常需要根据实际的模型重新计算每个Cell的高度.直接的做法是在该代理方法中,直接根据模型来返回行高:另 [1]-(CGFloat)tableView:( ...
- UITableView 自定义多选
前言 在上一篇文章中介绍了UITableView的多选操作,有提到将 return UITableViewCellEditingStyleDelete | UITableViewCellEditing ...
随机推荐
- 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)
回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...
- Nginx下WordPress的Rewrite
最近接触WP Super Cache,该插件要求固定链接必须是重写的,故用到Rewrite. 我的是这样配置的: /usr/local/nginx/conf/rewrite/wordpress.con ...
- js常用函数
日期时间函数(需要用变量调用): var c=new Date; c.getDate(); document.write(c) //获取当前时间 var c=new Date(); c.getTime ...
- Atitit 常用比较复杂的图像滤镜 attilax大总结
Atitit 常用比较复杂的图像滤镜 attilax大总结 像素画滤镜 水彩油画滤镜 素描滤镜 梦幻镜 特点是中央集焦,周围景物朦化微带光晕,使人产生如入梦境的感觉.常用于拍摄婚纱.明星照,也用于其它 ...
- C#设计模式-工厂模式
引入人.工厂.和斧子的问题 原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子,如果把大家的石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作效率极低. ...
- 隐藏自定义tabbar(关于tabbar的hide属性对于自定义无效)
背景: 最近在做一个项目中 需要在tabbar中的一个子控制器中隐藏tabbar. 我是tabbar我是自定义的XIB 视图addsubview到tabbar上. 首先po 一个在网上查到的解决方法: ...
- iOS开发中 workspace 与 static lib 工程的联合使用
在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...
- 对HTML5新增JS Api的思考
1.为什么javascript的变量名不使用css中的命名方法,而选择使用驼峰命名法 因为在javascript中“-”表示减法,所以如果使用“-”的话会出现不必要的问题. 2.在javascript ...
- CSS中如何实现未知尺寸图片垂直居中
在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是随意,而是有其现实的原因,垂直居中 ...
- 深入理解PHP内核(十四)类的成员变量及方法
原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...