欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂iOS培訓(xùn)之UITableView自定義右滑刪除的實(shí)現(xiàn)代碼

2018-07-20 13:25:15 4686瀏覽

今天扣丁學(xué)堂給大家主要介紹了iOS培訓(xùn)之UITableView自定義右滑刪除的代碼實(shí)現(xiàn),首先這個(gè)項(xiàng)目工程只是提供一種思路,應(yīng)對場景是需要自定義左滑刪除按鈕的樣式,因?yàn)轫?xiàng)目本身并不是修改系統(tǒng)的左滑刪除,而是自定義實(shí)現(xiàn),所以任何樣式都算使用。下面我們一起來看一下吧。



下面先說下項(xiàng)目的結(jié)構(gòu)類型



最底下自然是uitableviewCell然后放入一個(gè)scrollview填滿整個(gè)cell(若想有左右間隔,也可以不填滿)

scrollview中放入一個(gè)uiview和scrollview寬高相等作為內(nèi)容視圖。界面的所有控件視圖都添加到這個(gè)uiview中?。?!右邊就是自定義的刪除按鈕也添加到scrollview中。這樣就能實(shí)現(xiàn)滑動效果了。(你也可以加2個(gè)按鈕,3個(gè)按鈕,隨你開心)

下面講下代碼
  
  //設(shè)置代理
  -(void)awakeFromNib{
  [superawakeFromNib];
  self.myScrollView.delegate=self;
  }
  -(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
  [selfdidBeginMove];
  }
  -(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate{
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:YES];
  [selfscrollViewDidEnd:scrollView];
  }
  -(void)scrollViewDidScroll:(UIScrollView*)scrollView{
  CGPointoffset=scrollView.contentOffset;
  //左邊不彈性
  if(offset.x<0){
  offset.x=0;
  [scrollViewsetContentOffset:offsetanimated:NO];
  }
  }
  -(void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView{
  NSLog(@"beginbegin");
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:NO];
  [selfscrollViewDidEnd:scrollView];
  }
  -(void)scrollViewDidEnd:(UIScrollView*)scrollView{
  [scrollViewsetContentOffset:scrollView.contentOffsetanimated:YES];
  CGPointpoint=scrollView.contentOffset;
  if(point.x>DELETEWIDTH/2){
  self.deleteLeftLayout.constant=-3;
  [UIViewanimateWithDuration:0.3animations:^{
  [selflayoutIfNeeded];
  }];
  [scrollViewsetContentOffset:CGPointMake(DELETEWIDTH-3,0)animated:YES];
  self.detailView.layer.cornerRadius=0;
  }else{
  self.deleteLeftLayout.constant=0;
  [selflayoutIfNeeded];
  [scrollViewsetContentOffset:CGPointMake(0,0)animated:YES];
  self.detailView.layer.cornerRadius=5;
  }
  }
  -(void)didBeginMove{
  if(self.tableview){
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableview,@"currentCell");
  if(currentCell!=self&&currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  objc_setAssociatedObject(self.tableview,@"currentCell",self,OBJC_ASSOCIATION_ASSIGN);
  }
  }
  -(void)hideButtonsWithAnimation{
  [self.myScrollViewsetContentOffset:CGPointMake(0,0)animated:YES];
  self.detailView.layer.cornerRadius=5;
  self.deleteLeftLayout.constant=0;
  [selflayoutIfNeeded];
  }

代碼意思大致是,scrollview停止?jié)L動時(shí),根據(jù)最后的位置判斷是否顯示刪除按鈕。

這樣已經(jīng)實(shí)現(xiàn)了左右拖拽,彈出關(guān)系效果了。接下來就有一些細(xì)節(jié)部分需要注意。

1.我們觀察到,uitableviewcell只會出現(xiàn)一個(gè)刪除,當(dāng)tableView滾動,或另一個(gè)cell左滑刪除時(shí),前一個(gè)cell需要關(guān)閉。下面是我的解決方案

首先,當(dāng)tableviewcell里的scrollview開始拖拽時(shí),將當(dāng)前的cell和tableview關(guān)聯(lián)起來。并關(guān)閉之前關(guān)聯(lián)的cell

  -(void)didBeginMove{
  if(self.tableview){
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableview,@"currentCell");
  if(currentCell!=self&&currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  objc_setAssociatedObject(self.tableview,@"currentCell",self,OBJC_ASSOCIATION_ASSIGN);
  }
  }

然后到tableview的代理中(注意是tableview,不是cell中的scrollview)當(dāng)tableview準(zhǔn)備滾動,就直接關(guān)閉掉他關(guān)聯(lián)的cell。

  -(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
  MyTableViewCell*currentCell=objc_getAssociatedObject(self.tableView,@"currentCell");
  if(currentCell!=nil){
  [currentCellhideButtonsWithAnimation];
  }
  }

代碼修正過一版,之前那版有點(diǎn)小bug。

當(dāng)cell點(diǎn)擊時(shí),如果處于編輯狀態(tài),就先關(guān)閉編輯狀態(tài)。我的做法是直接在內(nèi)容view中添加點(diǎn)擊手勢(同時(shí)完成點(diǎn)擊事件的代理),然后內(nèi)部屬性判斷是否處于編輯狀態(tài)。

以上就是關(guān)于扣丁學(xué)堂iOS培訓(xùn)之UITableView自定義右滑刪除的實(shí)現(xiàn)代碼詳解,希望可以幫助到同學(xué)們,扣丁學(xué)堂就是iOS視頻教程的集合地,這里有iOS視頻教程入門到高級的全部視頻,可以供學(xué)員免費(fèi)學(xué)習(xí),不收取任何費(fèi)用的哦!如果你想學(xué)習(xí)iOS的話,那就行動吧。

標(biāo)簽: iOS培訓(xùn) iOS學(xué)習(xí)視頻 iOS視頻教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部