2012-02-20 2 views
7

테이블 뷰 셀에서 두 번의 상호 작용을 원합니다 : 정상 탭 및 길게 누릅니다. 나는 나를 시작하는 데 도움이 다음에 대한 답변을 사용 :테이블 뷰 셀에서 길게 눌러 제스처

Long press on UITableView

그 문제는 내가 유효한 셀을 길게 누르면를 할 경우, 셀이 파란색 강조하며, 긴 보도 제스처가하는 것입니다 화재가 아닙니다 (단지 간단한 탭이라고 생각합니다). 그러나 유효하지 않은 셀에서 길게 눌러 제스처를 시작한 다음 유효한 셀로 손가락을 슬라이드시킨 다음 놓으면 정상적으로 작동합니다.

먼저 테이블에 긴 보도 제스처 인식기를 만듭니다

+1

정의에 의해 "잘못된 셀"이 무엇입니까? – omz

+0

"필요없는 셀"이라고 생각합니다 –

답변

-2

어쩌면 IB에서 선택을 비활성화하거나 프로그래밍 방식

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
+0

단순히 파란색 강조 표시를 사용 중지 하시겠습니까? – user1120008

+0

제 이론은 셀이 이미 강조 표시되어 있기 때문에 길게 누르는 제스처가 시작되지 않는다는 것입니다. 제 제안을 시험해주세요, 당신은 아무것도 잃지 않을 것입니다. –

+0

그 방법으로 운이 없음. – user1120008

23

여기가 아마 더 나은 대답 밖에이지만, 그것을 할 수있는 한 가지 방법이다 보기 자체.

UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)]; 
[self.tableView addGestureRecognizer:longPressRecognizer]; 

그런 다음, 선택된 행 찾을 수 루틴으로 처리 :

-(void)onLongPress:(UILongPressGestureRecognizer*)pGesture 
{ 
if (pGesture.state == UIGestureRecognizerStateRecognized) 
{ 
    //Do something to tell the user! 
} 
if (pGesture.state == UIGestureRecognizerStateEnded) 
{ 
    UITableView* tableView = (UITableView*)self.view; 
    CGPoint touchPoint = [pGesture locationInView:self.view]; 
    NSIndexPath* row = [tableView indexPathForRowAtPoint:touchPoint]; 
    if (row != nil) { 
     //Handle the long press on row 
    } 
} 
} 

나는 그것을 시도하지 않은,하지만 난 제스처를함으로써 당신은 선택을 게재 행을 유지할 수 있다고 생각 테이블보기의 인식기는 긴 누름이 실패 할 때까지 기다립니다.

2

같은 문제가 발생하여 좋은 해결책을 발견했습니다. (iOS 7 이상)

셀에이을 추가하십시오.

self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onSelfLongpressDetected:)]; 
[self addGestureRecognizer:self.longPressGesture]; 

자체를 대상으로 초기화하기, 또한 자신과 호출되는 onSelfLongpressDetected 방법으로 다시 gestureRecognizer을 추가 할 이상하지만 중요한.

0

문제가 발생했습니다. 먼저 선택 가능한 셀 내부의 UIView에 길게 누르는 제스처를 추가하려고 시도했지만 작동하지 않았습니다. 해결책은 이전에 Fabio의 답변에서 말한 것처럼 셀 자체에 제스처를 추가하는 것이 었습니다.

신속 울부 짖는 소리에서 솔루션을 추가 :

let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(longPress(_:))) 
longPress.minimumPressDuration = 1.0 
cell.addGestureRecognizer(longPress) 

은 내가 UITableViewDataSource 방법 cellForRowAtIndexPath 내부에 위의 코드를 사용했다.