objective-c自訂滑操(原創)

來源:互聯網
上載者:User

標籤:

滑動刪除在當前的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滑操方法我當前好像還沒見網路上有人使用過,大多是使用手勢)

 

 

 

 

 

 

objective-c自訂滑操(原創)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.