2013-04-26 2 views
4

모든 검색을 시도했지만 한 주 동안 비슷한 내용을 찾지 못했습니다. 테이블 뷰를 표시하는 응용 프로그램을 만들고 있습니다. 셀 (사용자 정의 클래스 및 Interface Builder로 작성)은 셀 클래스의 pu 인 UIPanGestureRecognizer로 끌 수 있습니다. 나는 응용 프로그램 충돌 오류가있는 셀을 누르면 손가락 지킬 때 모든 것을 제외하고 잘 작동 :uilongpressgesturerecognizer가 구현되지 않은 경우에도 충돌이 발생합니다.

-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILongPressGestureRecognizer translationInView:]: unrecognized selector sent to instance 0x94670a0' 

을 나는 (인스턴스로 전송 일반적으로 잘못된 매개 변수) 의미합니까 알고 있지만, 정말 돈 내 코드에 UILongPressGestureRecognizer의 흔적이 없으므로 어떻게 가능한지 알 수 없습니다. LongPressGestureREcognizer를 가로 챌려고했는데 (모든 셀을 할당하기 전에 셀 클래스의 tableview 클래스에서) 오류가 여전히 동일합니다. (제목에 나와있는 많은 스레드를보고 신뢰했습니다. 구문이 옳았습니다. 당신이 다른 문서를 원하는 문의 주시기합니다.

(이것은 내 첫 번째 게시물 내가 제시해야 정확히 모르는 여기)

.

당신의 소중한 도움을 주셔서 감사합니다. 좋아

문제는 여전히 미안합니다. (필자는 어떻게 든 중단 점을 설정하고 스택 추적을 인쇄 할 수있었습니다. 여기에 있습니다 :

0 uBellow        0x0000ac57 -[OpinionCell gestureRecognizerShouldBegin:] + 71 
1 UIKit        0x00914939 -[UIGestureRecognizer _shouldBegin] + 1334 
2 UIKit        0x0091181a -[UIGestureRecognizer setState:] + 152 
3 UIKit        0x00921cea -[UILongPressGestureRecognizer enoughTimeElapsed:] + 127 
4 libobjc.A.dylib      0x017186b0 -[NSObject performSelector:withObject:] + 70 
5 UIKit        0x00787954 -[UIDelayedAction timerFired:] + 83 
6 Foundation       0x0114d2c0 __NSFireTimer + 97 
7 CoreFoundation      0x01bce376 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22 
8 CoreFoundation      0x01bcde06 __CFRunLoopDoTimer + 534 
9 CoreFoundation      0x01bb5a82 __CFRunLoopRun + 1810 
10 CoreFoundation      0x01bb4f44 CFRunLoopRunSpecific + 276 
11 CoreFoundation      0x01bb4e1b CFRunLoopRunInMode + 123 
12 GraphicsServices     0x022337e3 GSEventRunModal + 88 
13 GraphicsServices     0x02233668 GSEventRun + 104 
14 UIKit        0x00648ffc UIApplicationMain + 1211 
15 uBellow        0x0000287d main + 141 
16 uBellow        0x000027a5 start + 53 

코드의 응용 프로그램 블록 : 나는 UILongPressGestureRecognizer을 차단함으로써 해결

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 
CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

편집, 그것은 안전한 방법입니다? 당신에

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 
if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]){ 
    return NO; 
}else{ 
CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 
// Check for horizontal gesture 
if (fabsf(translation.x) > fabsf(translation.y)){ 
    return YES; 
} 
} 
return NO;} 
+0

이'xib'의 개체 및 관련 코드 –

+0

셀 객체의 이미지를보기 다음과 같습니다. http : // postimg.org/image/jnird1ifh/코드 문제는 내가 UILongpressGestureRecognizer에 대해 아무 것도 코딩하지 않았다는 것을 볼 수있다. – dado728

+0

당신의 문제는 기본적으로 UITableView에 이미 통합되어있는 사용자 정의 제스처 인식기를 사용하고있다. http : // developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html ("테이블 행 재정렬"섹션을 참조하십시오. –

답변

4

:

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 

봅니다 변경 :

CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

사람 :이 도움이

CGPoint translation = [gestureRecognizer locationInView:[self superview]]; 

희망.

+0

당신 GENIUS! 고마워요. 완벽하게 작동했습니다. 처음에는 셀의 원래 위치로 스크롤 할 수 없었지만 [self superview]에서 self로 바뀌 었습니다. 이제는 완벽하게 작동합니다. – dado728

+0

편집 :(이제는 작동하지만 이제는 처음으로 스 와이프 만 할 수 있습니다. 두 개의 셀, 그럼 다른 사람을 위해 작동하지 않습니다. 세포의 높이가 다르며 다른 크기로 인해이 버그가 발생할 수 있는지 조사 중입니다 ... – dado728

14

나는이 문제를받은 gestureRecognizer의 유형을 확인하여이 문제를 해결했습니다.

때때로 나는 "UIPanGestureRecognizer"의 "UILongPressGestureRecognizer"대신을 받았다.

이 시도 :

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 
    if ([gestureRecognizer class] == [UIPanGestureRecognizer class]) { 
     CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

     return YES; 
    } 
    return NO; 
} 

업데이트

스위프트 2.0 버전

override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 
    guard let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { return false } 

    let translation = panGestureRecognizer.translationInView(self.superview) 
} 
+0

이 문제의 올바른 해결책입니다. – MusiGenesis

+0

이 솔루션은 효과가있었습니다. 제 경우에도 더 좋을 것입니다. –

+0

아주 좋네요 - 이것이 왜 처음에는 문제가 될지 모른다고 생각하세요? – trdavidson

관련 문제