2014-08-31 5 views
0

안녕하세요, 저는 UIViewControllers입니다. 첫 번째 이미지에는 이미지가 포함 된 UIButton이 있습니다. 그런 다음 사용자가 내 두 번째 ViewController에 도착하면 다양한 이미지가 포함 된 많은 버튼이 있습니다. 그래서, 사용자가 내 VC2에서 하나의 버튼을 누르면, 내 VC1의 UIButton으로 이미지를 설정해야합니다.다른 클래스의 IBOutlet에 액세스

가 이미 추가하여 첫 번째 VC를 구현했습니다 : #import "ViewController1.h"ViewController2.m@interface ViewController2() 전에

내가 어떻게 할 수 있습니까? 예를 들면 :

VC2 :

- (IBAction)seaButton:(id)sender { 
//Access the IBOutlet from VC1 and set the image of the Button like: 

UIImage * seaBtnImage = [UIImage imageNamed:@"Sea.png"]; 
[buttonOutlet setImage:seaBtnImage forState:UIControlStateNormal]; 
} 

감사합니다!

+0

콘센트를 비공개로 처리하십시오. 뷰 컨트롤러가 서로에게 전달할 정보를 가지고 있다면, 다른 컨트롤러에서 메소드를 호출 할 수 있도록 메소드로 컨트롤러를 구성해야합니다. – matt

답변

2

1 단계 : VC2에 속성을 생성 ViewController2.h으로는 참조 할 VC1 :

#import "ViewController1.h" 

@property (nonatomic, strong) ViewController1 *viewController1; 

2 단계 : VC1로 VC2를 만들 때 속성 설정 :

[viewController2 setViewController1:self]; 

단계 3 : ViewController2에

[self.buttonVC2 setImage:[self.viewController1.buttonVC1 imageForState:UIControlStateNormal] forState:UIControlStateNormal]; 

참고 버튼 이미지를 설정 : 더 나은 모델을 반환 VC1에 방법을 제공하는 것이다 올바른 이미지. VC1의 예를 들면 다음과 같습니다

- (UIImage *)imageForButton { 
    return [self.buttonVC1 imageForState:UIControlStateNormal]; 
} 

및 VC2에서

:.

대표가에서 걷어차 어디
[self.buttonVC2 setImage[self.viewController1 imageForButton]]; 
+0

높은 커플 링으로 인해 실제로 나쁜 관행. 특정 조건에서 쉽게 유지 사이클을 유발할 수있는 강한 컨트롤러 유지력은 말할 것도 없습니다 – keeshux

1

과 같이 정의합니다

@protocol ButtonSelectionDelegate <NSObject> 

- (void)didSelectButtonImage:(UIImage *)image; 

@end 

및 VC1에 구현합니다. VC2에 다음 속성을 추가하십시오.

@property (nonatomic, weak) id<ButtonSelectionDelegate> delegate; 

VC2를 VC2의 대리자로 설정하십시오. 에서

VC2의 사용자가 로컬에서 선택한 이미지를 전달하여 위임에 위의 didSelectButtonImage: 메소드를 호출 IBAction :에서

- (IBAction)seaButton:(id)sender 
{ 
    UIImage *seaBtnImage = [UIImage imageNamed:@"Sea.png"]; 
    [self.delegate didSelectButtonImage:seaBtnImage]; 
} 

을 VC1의 didSelectButtonImage: 당신 위임에 의해 제공되는 하나의 VC2와 출구 버튼 이미지를 업데이트합니다 :

- (void)didSelectButtonImage:(UIImage *)image 
{ 
    [self.buttonOutlet setImage:image forState:UIControlStateNormal]; 
} 
관련 문제