ios UITableView 사용자 정의 오른쪽 슬라이딩 삭제 구현 코드
5352 단어 iosUITableView오른쪽 슬라이더 삭제
마음 이 무 너 지 는 나 는 여러 가지 방법 을 생각 했다.시스템 자체 테이프 단 추 를 가 져 와 원 각 을 바 꾸 는 것 도 해 봤 고 사용자 정의 제스처 도 해 봤 습 니 다)마지막 으로 모든 사용자 정 의 를 결정 합 니 다.개인 적 으로 그게 제일 잘 어 울 릴 것 같 아서 요.다음은 효과 도.
오늘 시간 이 있 으 면 실현 방식 을 조금 말씀 드 리 겠 습 니 다.
이 프로젝트 프로젝트 는 단지 하나의 사고방식 을 제공 할 뿐,대응 장면 은 왼쪽 슬라이딩 삭제 단추 의 스타일 을 사용자 정의 해 야 한다.
프로젝트 자 체 는 시스템 의 왼쪽 미끄럼 삭 제 를 수정 하 는 것 이 아니 라 사용자 정의 로 이 루어 지기 때문에 모든 스타일 을 사용 합 니 다.
다음은 프로젝트 의 구조 유형 을 먼저 말씀 드 리 겠 습 니 다.
맨 아래 는 당연히 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.