2011-10-20 2 views
1

나는 UIViewController이고 서브 뷰는 UIView입니다. UIViewControllerUIView의 특정 작업에 대한 알림 (또는 수신 대기)을 보내고 싶습니다. 이 작업을 수행하는 표준 방법은 무엇입니까? 그냥 액션 핸들러를 갖고 싶어UIViewController에게 서브 뷰에서 발생한 일에 대해 알릴 때

+1

어떤 종류의 작업입니까? 버튼 누름? 속성의 가치 변화가 있습니까? –

+0

물론 버튼을 눌러도 작동합니다. – SundayMonday

답변

2

: 액션 메시지

– sendAction:to:forEvent: 
– sendActionsForControlEvents: 
– addTarget:action:forControlEvents: 
– removeTarget:action:forControlEvents: 
– actionsForTarget:forControlEvent: 
– allTargets 
– allControlEvents 

준비 및 전송

: 추가 정보를 위해

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // ...... 
    UIButton *myButton = [[UIButton alloc] init]; // or initWithSOMETHING 
    [myButton addTarget:self action:@selector(someMethod:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:myButton]; 
    [myButton release]; 
    // ...... 
} 

- (void)someMethod:(id)sender { 
    if (![sender isKindOfClass:[UIButton class]]) return; 
    // Do something about the action here... 
} 

을의 UIControl Documentation 참조 당신의 부모 뷰 컨트롤러를 호출하는 뷰 컨트롤러에 대해 이야기하는 경우

은 또는, 당신은 "부모"뷰 컨트롤러에 액세스 할 UIViewControllerpresentingViewController 속성을 사용할 수 있습니다

UIViewController *parentVC = [self presentingViewController]; 
[parentVC setSomething:self.withSomething]; 

presentingViewController을 -보기를 이 뷰 컨트롤러를 제공하는 컨트롤러. 읽기 전용

@property(nonatomic, readonly) UIViewController *presentingViewController

토론
이 속성의 디폴트 구현은이 뷰 컨트롤러부터보기 계층을 걷는다. 첫 번째보기 컨트롤러에서 presentViewController:animated:completion: 메서드를 수신했거나 definesPresentationContext 속성을 YES으로 설정하면 해당 속성의 값이 으로 반환됩니다. 이 반환 할 값을 찾거나 루트보기 컨트롤러에 도달 할 때까지 계속 계층 구조를 따라갑니다.


아니면 UIViewsuperview 특성 :

superview

[self.view.superview doSomething]; 
- 수신기의 수퍼, 아니면 아무것도가없는 경우는 전무. (읽기 전용)
@property(nonatomic, readonly) UIView *superview

2

위의 의견에 답변을 바탕으로,이 버튼을 눌러 즉, "표준"방법은 UIControl의 메커니즘을 사용하는 것입니다. 방법 myViewController에서 실행되는 : 그래서, 당신은 "myButton에"를 누르면

[myButton addTarget:myViewController action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

할 프로그램, 경우 "의 buttonPressed"가 발생합니다. Interface Builder를 사용하여 연결을 만들 수도 있습니다.

이 코드는 여러 위치 (UIView, UIViewController)에 넣을 수 있으며 결과적으로 변수의 정확한 이름이 변경되지만 버튼을 눌러야 처리 할 수 ​​있습니다. 가장 쉬운 방법.

관련 문제