2014-09-19 1 views
0

사용자 정의보기로 그리는 카드가 있습니다. 나는 뒤집기와 선택을 위해 모든 카드에 슬쩍 제스처를 추가하려고합니다. 모든 카드보기에 제스처가 필요하므로보기의 initWithFrame : 메소드에 제스처를 추가하기로합니다. 그러나 카드를 선택하는 것이 컨트롤러에있는 방법이므로 인식 할 때이 제스처를 처리하기 위해 내 컨트롤러에 맡기고 싶습니다. 여기 내 코드입니다 : 컨트롤러에서보기에 동작을 추가하도록 처리하는 방법은 무엇입니까? iOS

[self addGestureRecognizer:[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)]]; 

이 사실 나는 내 컨트롤러 할 대상이 필요합니다, 나는 나의 컨트롤러 방법이라는 슬쩍를 호출합니다. 대상 자체은 자체를 볼 수있는 제스처 처리 만 남깁니다.

어쩌면 나는 목표물을 대체하기 위해 컨트롤러를 얻을 수 없다. 아무도이 문제를 해결하기위한 정확한 방법을 말할 수 있습니까?

답변

2

컨트롤러가 무엇인지 알 필요가 없습니다. (이것은 커플 링을 증가시키고 응집을 줄이는데 좋지 않습니다.)

이 문제에 대한 일반적인 해결책은보기가 대리인 프로토콜을 선언하는 것입니다. 뷰 컨트롤러는 뷰 자체를 위임자로 설정할 수 있습니다. 그러면보기의 swipe: 메서드가 대리자 메서드를 호출합니다.

코드 예는 this question을 참조하십시오.

+0

+1 나. 다음과 같은 서명 - (void) cardDidSwipe : (CardView *) card; 이 방법을 사용하면 카드보기가 대리인에게 전달 될 수 있습니다 (많은 카드가 있다고 가정 할 때). –

1

누구든지이 문제를 해결하기위한 올바른 방법을 말할 수 있습니까?

제스처가 뷰 컨트롤러에서 동작하는 경우 뷰 컨트롤러가 뷰에 제스처를 추가하도록해야합니다. 뷰 컨트롤러는 뷰와 뷰 자체에 대한 참조를 포함하여이를 수행하기에 좋은 위치에 있습니다. 예를 들어 -viewDidLoad과 같이 여러 가지 작업을 수행 할 수 있습니다.

+0

이 솔루션은 작동하지만 카드보기가 여러 컨트롤러에서 사용되는 경우 각 컨트롤러에 제스처 인식기 코드가 중복됩니다. –

관련 문제