2012-06-20 2 views
0

내 코드 UIViewController는 채워진 원 등을 그릴 프레임이있는 UIView 인 객체 \ class를 인스턴스화합니다. 그 객체에 제스처를 추가했습니다. 두 번째 클래스 프레임 때 발생하는 탭을 두 번째 클래스를 해제하고 (UIViewController)에서 첫 번째 개체에 작성된 일부 메서드를 트리거하려면 닫고 싶습니다. 이제이 두 번째 클래스는 탭을 인식하지만 클래스 자체를 dealloc하여 클래스를 벗어나는 방법을 알 수 없으며 첫 번째 클래스에 무언가를 수행하도록 알립니다 (메서드 호출).제스처가 다른 객체에서 시작되었을 때 동작을 트리거하는 방법 class

희망이 있으리라 생각하십니까?

감사

+0

첫 번째 클래스에 대리자 또는 IBOutlet을 설정합니다. 두 번째 클래스에서 제스처를 처리하면 두 번째 클래스를 할당 해제하고 첫 번째 클래스 (첫 번째 응답자)에서 필요한 것을 수행하는 대리자 (첫 번째 클래스)에게 메시지를 보냅니다. – justin

+0

@ IBLEutlet을 @slev 일등석에? 해당 IBOutlet 또는 대리인에게 메시지를 보내려면 어떻게해야합니까? 가능하다면 당신은 어떤 코드로 정교 할 수 있다면 그것은 위대 할 것이다. –

+0

물론입니다. 함께 간단한 샘플 코드를 만들어 보겠습니다. 답변으로 추가하겠습니다 (서식을 지정하는 것이 훨씬 쉽습니다). – justin

답변

0

가장 쉬운 방법은, 제 생각에, 두 번째 클래스의 대리자를 만드는 것입니다. 예를 들어 FirstClass와 SecondClass가 있다고 가정합니다. 각 파일은 자신의 파일입니다. SecondClass.h에서

SecondClass *class2 = [[SecondClass alloc] init....]; 
// set up the delegate, which basically creates a link between SecondClass and FirstClass; 
class2.delegate = self; 

, 당신이 뭔가를 설정해야합니다 : 당신이 SecondClass합니다 (UIView의를 인스턴스화)의 해당 인스턴스를 설정 최우수상을,에서

, 당신은 다음과 같은 일을 할 것이다 :

// add the FirstClass header file; 
#import "FirstClass.h" 

// synthesize the value; 
@synthesize delegate; 

// later on into the implementation file; 
- (void)gestureHandlingMethod:(UIGestureRecognizer *)gesture { 
    // do whatever you need for the gesture in SecondClass; 
    // send a message to FirstClass (now defined as delegate of SecondClass); 
    [self.delegate handleGesture:gesture forClass:self]; 
} 
:
@property (nonatomic, strong) id delegate; 

및 SecondClass.m에

, 당신은 대리인에 대한 합성 값뿐만 아니라 제스처 처리 방법을 것이다

마지막으로,이 제스처 처리 방법을 FirstClass에 추가하여 필요한 것을 수행해야합니다. 따라서 FirstClass.h에 -(void)handleGesture:(UIGestureRecognizer *)gesture forClass:(id)secondClass;을 추가하십시오. 그런 다음이 방법을 FirstClass.m에 추가하여 다음과 같이 마무리하십시오.

- (void)handleGesture:(UIGestureRecognizer *)gesture forClass:(id)secondClass { 
    // do what you want here from within the FirstClass; 
    [self doSomethingWithGestureIfYouWant:gesture]; 
    // then deallocate SecondClass if that's what you want to do; 
    [secondClass dealloc]; // you may need to specify [(SecondClass *)secondClass dealloc]; 
} 

이렇게해야합니다. 서로 다른 파일을 서로 연결하는 좋은 방법 일뿐입니다. 바라기를 이것은 당신을 도울 것입니다.

관련 문제