objective-c自定义滑操(原创)

滑动删除在当前的ios版本中已经支持了,但是遇到复杂的比如,滑动后的功能有多个,并不是删除功能,那么你就得自己写,我说得没错吧..........

其实关于滑删嘛,在以前的项目中也遇到过,当时ios还不支持滑删,所以只有看自己的了,当时我是在code4app上下的案例修改的,所以此功能以前也做好过,但是可悲的是android那边的程序员在网上下来案例后修改不出项目需求效果,固这个功能最后被项目经历是阉割了。。。。。

岁月如梭,公司已换了多个呵呵.....

当前公司这个项目又涉及到cell滑动功能操作,虽然当前ios已自带了滑动删除,但是他并不能完全满足当前项目要求,所以又得看自己得了,这次我没打算去网上下案例,因为这个项目时间并不那么紧迫,所以就自己写了哦。。。。。。。。。。 (下面进入主题)

今天我给大家讲解的重点是我实现这个功能的思路,想让大家理解的也是我实现的思路, 当我用这个思路实现这个功能后,再想想上次做这个功能时,从网上下那案例是多么的不值得我留恋.....

先贴图我公司实现的功能如下:

懂的人都知道,一看这玩意用ios自带的滑操是不行的呵呵

首先内容展示的控件是UITableView

三个cell其实是一个cell,的三种不同状态,如果这个你都不知道,你下面就别继续看了...

第一个为选中状态:就是用户要提交的地址

第二个为为选中状态:

第三个就是我们cell滑动后出现的效果,当这部分功能滑动出现后,我们需要隐藏掉小圆圈button

下面就是是我的所要讲的重点了

cell中展示的每一个控件,都是add 到一个scrollview中,然后将scrollview add到cell中

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;

                }
            }
       }
    }

}
 _recordCurrentOffsetX:是一个记录偏移量x坐标的cgfloat变量字段    
   if (_recordCurrentOffsetX<70) {}

上面这句是判断当前scrollview偏移量的 ,上面代码中的 <70 ------ 70就是我们cell扩展出的那部分 存放滑删功能的部分。
如果便宜两小于70了,我们就将偏移量设置为0,不展示出滑动删除部分

最开始我用了手势来做这个功能,cell add的是UIView,不是scrollview,然后给UIView增加相应的手势, 逻辑相对复杂,做出来之后有一个bug,就是当我上拉下拉这个uitableview刷新时(根本不怎么执行,而是执行contentview上绑定的手势),如果我将border的宽度设置为0,那么就完全不执行了,为什么我想我不说各位也知道。而且以前我下那案例也是用手势写的,那个案例虽然解决了,我用手势的困惑,但是体验完全不好,而且cell上add了很多层,实现代码之多。。。。我今天讲的重点就是:当项目涉及到自己写cell的滑操功能时,可选我这思路,只需要在UITableView中add一个UIScrollView,然后将滑动多出的宽度,增加到UIScrollView的contensize中去,再调几个代理 就完全搞定呵呵.....(此cell滑操方法我当前好像还没见网络上有人使用过,大多是使用手势)

时间: 2024-08-11 03:36:58

objective-c自定义滑操(原创)的相关文章

【转】iOS 通过xib自定义UITableViewCell【原创】

原文网址:http://blog.it985.com/9683.html 在使用tableView的时候,如果cell的布局过于复杂,通过代码搭建的话不够直观.并且要不停的调整位置,字体什么的.这时,我们可以通过在tableViewCell的xib上搭建会更加直观,有效提高开发效率.首先,在我们创建了工程之后,新建XIB的cell.command+n,选择Cocoa Touch Class然后选择UITableViewCell类型,同时钩上Also Create xib File之后,在对应的c

C#:实现快捷键自定义设置

需求 项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中. 最终的效果如下图所示: 核心代码如下所示: private void keyDown(object sender, KeyEventArgs e) { StringBuilder keyValue = new StringBuilder(); keyValue.Length = 0; keyValue.Append(""

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

WebComponent

WebComponent 前言  最近加入到新项目组负责前端技术预研和选型,一直偏向于以Polymer为代表的WebComponent技术线,于是查阅各类资料想说服老大向这方面靠,最后得到的结果是:"资料99%是英语无所谓,最重要是UI/UX上符合要求,技术的事你说了算.",于是我只好乖乖地去学UI/UX设计的事,木有设计师撑腰的前端是苦逼的:(嘈吐一地后,还是挤点时间总结一下WebComponent的内容吧,为以后作培训材料作点准备. 浮在水面上的痛 组件噪音太多了!  在使用Boo

专注于HTTP的高性能高易用性网络库:Fslib.network库

博客列表页:http://blog.fishlee.net/tag/fslib-network/ 原创FSLib.Network库(目前专注于HTTP的高性能高易用性网络库) FSLib.Network网络库使用教程[1] 基本使用 FSLib.Network网络库使用教程[2] 实例教程·美女们快到硬盘里来! 放一个抓取网页的信息监控小工具源码 原创FSLib.Network库发布 1.4 版8 12306订票客户端 FOR .NET 演示项目 [1]项目概况 12306订票客户端 FOR .

模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三方框架  点击下载 侧滑菜单的lib  点击下载 1 package com.lixu.testjsonall; 2 3 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 4 import com.jeremyfeinstein.slid

人脸检测——DDFD

本文所介绍的人脸检测,主要学习和实现了ICMR-2015年雅虎实验室的文章"Multi-view Face Detection Using Deep Convolutional Neural Networks".这是我接触和实现的第一个深度学习案例,本文除了讲解该文的算法以外,也是对我近2个月工作的总结. 学习还不够深入,有不足之处欢迎大家提出指正. 此外,本文在讲解的过程中会包含全部的源代码以及训练数据. 目录 目录 1- 构建深度学习训练数据集 1-1 制作训练正样本 1-2 制作

(转载)虚幻引擎3--基础知识

这是虚幻引擎3UDN的技术文档,共有六个章节.以下将分别把中文译本贴出来,方便懒人学习[偷笑]  一.虚幻引擎 3 基础知识 概述 -------------------------------------------------------------------- 有几个游戏性元素实际上是所有使用虚幻引擎3或虚幻开发工具包创建的项目所共有的.自定义这些元素可以创建出完全独特的.外观和行为符合期望的游戏.没有任何两个项目是相同的,尽管虚幻引擎提供了这些元素的默认实现,但是肯定需要对它们进行很大

【原创】android——Tabhost 自定义tab+底部实现+intent切换内容

1,实现tabhost自定义格式,再此仅仅显示背景和文字,效果图预览:(底边栏所示) (图片变形) 2,xml配置 activity_user的XML配置  1 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/tabhost&qu