2016-07-16 2 views
0

스위치를 연결하는 데 문제가 있습니다. 내가 콘센트로 스위치를 연결하는 방법을 이해하고 그것은 값의 부울 상태를 변경 작업을 가지고 있지만, 다른보기 컨트롤러에서 작업을 수행하려면 스위치가 필요합니다.Xcode에서 스위치 연결 문제?

여기 상황은 다음과 같습니다. 뷰 컨트롤러 A라고하는 메인 테이블 뷰 컨트롤러가 있습니다. 두 번째 뷰 컨트롤러가 있는데,보기 컨트롤러 B를 호출하여 메뉴 사이드 바를 제어합니다 (일반 뷰 컨트롤러에서는 테이블이 아닙니다). 보기). 메뉴를 열고 사이드 바의 스위치를 누르고 뷰 컨트롤러 A가 제어하는 ​​메인 테이블 뷰에서 뭔가 변경하고 싶습니다.

어떤 방법으로 이것을 할 수 있습니까? 나는 B에서 View Controller A의 IBOutlets를 액세스하거나 변경할 방법이없는 것 같다. 스위치와 연결된 B에서 값의 부울 상태를 변경하고 컨트롤러에서 대기중인 작업을 가질 수있는 방법이 있는가? 부울의 변화에 ​​반응 할 것입니까? 이 문제를 해결하는 방법을 모르겠습니다. 도움을 주시면 감사하겠습니다!

답변

1

delegation pattern을 사용해야합니다. 당신은 제어기 A에서 대기 작업을해야하지만, 대신에 B에서 변경된 값에 응답의 조치는 B에 의해 트리거 될 때 적절한

ViewControllerB.h

// Create delegate protocol and property 
@protocol ViewControllerBDelegate <NSObject> 
    - (void)switchPressed:(BOOL)switchStatus; 
@end 

@interface ViewControllerB : NSObject 
    @property (nonatomic,weak) id<ViewControllerBDelegate> delegate; 
@end 

ViewControllerB.m

// When switch is tapped, call delegate method if it is implemented by delegate object 
- (IBAction)flip: (id) sender { 
    UISwitch *onoff = (UISwitch *) sender; 
    if ([self.delegate respondsToSelector:@selector(switchPressed:)]) { 
     [self.delegate switchPressed:onoff.on]; 
    } 
} 

ViewControllerA.h

// Conform to ViewControllerB protocol 
#import ViewControllerB.h 

@interface ViewControllerA : NSObject,ViewControllerBDelegate 

ViewControllerA.m

// Set self (VC A) as VC B's delegate 
- (void)ViewDidLoadOrSomeOtherFunction {  
    ViewControllerB *vcB = [[ViewControllerB alloc] init]; 
    vcB setDelegate = self; 
} 

// Implement delegate method 
- (void)switchPressed:(BOOL)switchStatus { 
    if (switchStatus) { 
     // Make changes on VC A 
    } 
}