ios UITableView 사용자 정의 오른쪽 슬라이딩 삭제 구현 코드

회사 에 기발 한 수요 가 있다.삭제 단추 의 점 원 각 은 이 뿐만 아니 라 cell 사이 에 간격 이 있 고 cell 원 각,cell 좌우 에 간격 이 있 습 니 다.아래 그림!!!!!

마음 이 무 너 지 는 나 는 여러 가지 방법 을 생각 했다.시스템 자체 테이프 단 추 를 가 져 와 원 각 을 바 꾸 는 것 도 해 봤 고 사용자 정의 제스처 도 해 봤 습 니 다)마지막 으로 모든 사용자 정 의 를 결정 합 니 다.개인 적 으로 그게 제일 잘 어 울 릴 것 같 아서 요.다음은 효과 도.

오늘 시간 이 있 으 면 실현 방식 을 조금 말씀 드 리 겠 습 니 다.
이 프로젝트 프로젝트 는 단지 하나의 사고방식 을 제공 할 뿐,대응 장면 은 왼쪽 슬라이딩 삭제 단추 의 스타일 을 사용자 정의 해 야 한다.
프로젝트 자 체 는 시스템 의 왼쪽 미끄럼 삭 제 를 수정 하 는 것 이 아니 라 사용자 정의 로 이 루어 지기 때문에 모든 스타일 을 사용 합 니 다.
다음은 프로젝트 의 구조 유형 을 먼저 말씀 드 리 겠 습 니 다.

맨 아래 는 당연히 uitableviwCell 이 고 scrollview 를 넣 어 전체 cell 을 채 웁 니 다.(좌우 간격 이 있 으 려 면 채 우지 않 아 도 됩 니 다)
scrollview 에 uiview 와 scrollview 의 너비 가 같은 내용 보기 로 넣 습 니 다.인터페이스의 모든 컨트롤 보기 가 이 uiview 에 추 가 됩 니 다!!오른쪽 에 사용자 정의 삭제 단추 도 scrollview 에 추가 합 니 다.이렇게 하면 미끄럼 효 과 를 실현 할 수 있다.버튼 2 개,버튼 3 개 를 추가 할 수 있 습 니 다.마음대로 하 세 요)
다음은 코드 를 말씀 드 리 겠 습 니 다.

//    
- (void)awakeFromNib {
  [super awakeFromNib];
  self.myScrollView.delegate = self;
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
  [self didBeginMove];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
  [scrollView setContentOffset:scrollView.contentOffset animated:YES];
  [self scrollViewDidEnd:scrollView];
}


-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
  CGPoint offset = scrollView.contentOffset;
  //     
  if (offset.x < 0 ) {
    offset.x = 0;
    [scrollView setContentOffset:offset animated:NO];
  }
}

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
  NSLog(@"beginbegin");
  [scrollView setContentOffset:scrollView.contentOffset animated:NO];
  [self scrollViewDidEnd:scrollView];
}

-(void)scrollViewDidEnd:(UIScrollView *)scrollView{
  [scrollView setContentOffset:scrollView.contentOffset animated:YES];
  CGPoint point = scrollView.contentOffset;
  if (point.x > DELETEWIDTH / 2) {
    self.deleteLeftLayout.constant = -3;
    [UIView animateWithDuration:0.3 animations:^{
      [self layoutIfNeeded];
    }];
    
    [scrollView setContentOffset:CGPointMake(DELETEWIDTH -3 , 0) animated:YES];
    self.detailView.layer.cornerRadius = 0;
  }else{
    self.deleteLeftLayout.constant = 0;
    [self layoutIfNeeded];
    [scrollView setContentOffset: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) {
      [currentCell hideButtonsWithAnimation];
    }
    objc_setAssociatedObject(self.tableview, @"currentCell", self, OBJC_ASSOCIATION_ASSIGN);
  }
}

-(void)hideButtonsWithAnimation{
  [self.myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];
  self.detailView.layer.cornerRadius = 5;
  self.deleteLeftLayout.constant = 0;
  [self layoutIfNeeded];
}
코드 는 스크롤 뷰 가 스크롤 을 멈 출 때 마지막 위치 에 따라 삭제 단 추 를 표시 할 지 여 부 를 판단 한 다 는 뜻 입 니 다.
이렇게 해서 좌우 드래그,팝 업 관계 효과 가 실현 되 었 습 니 다.다음은 세부 적 인 부분 에 주의해 야 할 부분 이 있다.
1.uitableviewcell 은 하나의 삭제 만 나타 나 는 것 을 관찰 합 니 다.tableView 가 굴 러 가 거나 다른 cell 이 왼쪽 으로 미끄러져 삭제 할 때 이전 cell 은 닫 아야 합 니 다.다음은 제 해결 방안 입 니 다.
우선,tableview cell 의 scrollview 를 끌 기 시작 하면 현재 cell 과 tableview 를 연결 합 니 다.이전에 연 결 된 cell 을 닫 습 니 다.

-(void)didBeginMove{
  if (self.tableview) {
    MyTableViewCell *currentCell = objc_getAssociatedObject(self.tableview, @"currentCell");
    
    if (currentCell != self && currentCell != nil) {
      [currentCell hideButtonsWithAnimation];
    }
    objc_setAssociatedObject(self.tableview, @"currentCell", self, OBJC_ASSOCIATION_ASSIGN);
  }
}
그리고 tableview 의 프 록 시 에 가서(주의 하 는 것 은 tableview 입 니 다.cell 의 scrollview 가 아 닙 니 다)tableview 가 스크롤 을 준비 하면 연 결 된 cell 을 직접 닫 습 니 다.

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
  MyTableViewCell *currentCell = objc_getAssociatedObject(self.tableView, @"currentCell");
  if (currentCell != nil) {
    [currentCell hideButtonsWithAnimation];
  }
}
코드 를 한 판 수정 한 적 이 있 습 니 다.전에 그 판 은 약간 작은 bug 가 있 었 습 니 다.
2.cell 을 클릭 할 때 편집 상태 에 있 으 면 편집 상 태 를 닫 습 니 다.제 방법 은 콘 텐 츠 view 에 클릭 제스처 를 직접 추가 한 다음 에 내부 속성 으로 편집 상태 에 있 는 지 판단 하 는 것 입 니 다.구체 적 인 코드 시간 문 제 는 demo 에 정리 되 지 않 았 습 니 다.여러분,양해 해 주 십시오.
이렇게 많아너희들 도 이렇게 진귀 한 제품 과 미 공 을 만 나 지 못 할 것 같다.
다운로드 주소:nextTableDelete_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기