2011-06-13 5 views
2

상황 : 기본 View Controller에서 UIScrollView가 있고 그 안에 UIView가 모두 잘 작동합니다 (View Controller> UIScrollView> UIView).UIView에서 UIViewController로 값 전달

//In the main view controller... 
- (void)viewDidLoad { 
    UIView *subview1 = [[UIView alloc] initWithFrame:rect1]; //create a UIView 
    [self.scrollView addSubview:subview1]; //add it to UIScrollView 
} 

질문 : 해당 UIView의 문자열을 메인보기 컨트롤러로 다시 전달하려면 어떻게해야합니까?

답변

4

일반적인 해결 방법은 위임입니다. 당신은 관심이 누구에 정보를보고하는 방법을 알고있는 사용자 정의 UIView 서브 클래스를 만들 :

@interface MyView : UIView {} 
@property(assign) id delegate; 
@end 

@implementation MyView 

- (void) somethingHappened 
{ 
    [delegate stringDidChange:newStringValue]; 
} 

@end 

@implementation MyController 

- (void) viewDidLoad 
{ 
    MyView *subview = …; 
    [subview setDelegate:self]; 
} 

- (void) stringDidChange: (NSString*) newStringValue 
{ 
    NSLog(@"New string value reported from the view: %@.", newStringValue); 
} 

@end 

컴파일러는 당신을 위해 더 많은 일을 확인할 수 있도록, 당신은 위임에 대한 프로토콜을 만들 수 있습니다하려는 경우

. 보유 된 속성은 retain cycle이되므로 대리자는 보존되지 않은 할당 된 속성입니다.

문제는 알림, KVO 또는 블록을 사용하여 해결할 수도 있습니다.