2013-04-19 3 views
4

NSArray을 매개 변수로 전달하고 UITapGestureRecognizer에 다운로드 한 다음 downloadOptionPressed 메서드에 액세스하려고합니다. 어떻게해야합니까?매개 변수로 NSDictionary를 UITapGestureRecognizer에 전달하십시오.

다음은 UITapGestureRecognizer

UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)]; 
    [downloadOption addGestureRecognizer:downloadOptionPressed]; 

downloadOptionPressed 방법

-(void)downloadOptionPressed:(UIGestureRecognizer*)recognizer{ 

} 
+0

당신은 재산과 액세스를 할 수 있습니까? –

+0

그리고 NSArray 또는 NSDictionary를 준수합니까? –

+0

셀렉터는 당신이 주목 한 제스처를 건네줍니다. 왜 메소드에 접근 할 수있는 배열을 만드는 것이 아닌가? – Jeremy

답변

10

당신이 소유 뷰 컨트롤러의 정보를 저장할 수없는 이유가 작성 NSArray

NSArray *parameters = [NSArray arrayWithObjects:currentTrack, nil]; 

? 그것은 추상화를위한 것입니까? 당신은 통과 관련된 객체을 사용할 수 있습니다

- (void)downloadOptionPressed:(UserDataTapGestureRecognizer *)recognizer { 
    NSArray *parameters = recognizer.userData; 
} 
4

UserDataTapGestureRecognizer *downloadOptionPressed = 
    [[UserDataTapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(timeFrameLabelTapped:)]; 
downloadOptionPressed.userData = parameters; 

...

@interface UserDataTapGestureRecognizer : UITapGestureRecognizer 
@property (nonatomic, strong) id userData; 
@end 

@implementation UserDataTapGestureRecognizer 
@end 

:

당신은 항상 더 많은 데이터를 전송하는 UITapGestureRecognizer을 확장 할 수 있습니다 인수와 탭 제스처 인스턴스.

이이 objective-c-associated-objects

그것은 당신의 문제를 해결할 확인할 수 있습니다.

+0

정말 대단한, 거의 논의되지 않은 기능! 서브 클래 싱보다 훨씬 깔끔합니다. – SaltyNuts

1

때때로 색인을 전달하는 것으로 충분합니다.이 경우 태그 속성보기가 귀하의 동맹입니다. 다음 예제에서는 테이블 뷰 셀에 긴 프레스를 추가하는 척했습니다. 이벤트가 트리거 된 후, 나는 단지 오래 눌러 진 세포 알고 싶어 :

let longPress = UILongPressGestureRecognizer(target: self, action: "longPress:") 
    cell.tag = indexPath.row 
    cell.addGestureRecognizer(longPress) 

...

func longPress(guesture: UILongPressGestureRecognizer) { 
    print("\(guesture.view!.tag)")} } 
관련 문제