2017-04-23 6 views
0

팝업 표시 내부에있는 UISwitch에 의해 트리거 된 동작에서 UIImageView를 숨길 필요가 있습니다.Popover (iPad)의 UISwitch 동작에서 UIImageView 숨김

나는이 코드를 사용하고 있지만 UISwitch를 두드리는 동안 아무 것도하지 않습니다. 아마 UISwitch가 popover 뷰 내부에 있기 때문일 것입니다.

이 코드는 iPhone에서 완벽하게 작동하지만 iPad에서는 작동하지 않으며 UIImageView는 숨기지 않습니다. 왜?

- (IBAction)toggleImage:(id)sender { 
    if ([sender isOn]){ 
     self.myImage.hidden = NO; 
    } else { 
     self.myImage.hidden = YES; 
    } 
} 

의 UIImageView은 출구에 연결되고 출구는 UISwitch 행동에 접속된다.

도와주세요. 감사합니다.

+0

, NSLog는 ("%의 @"@, self.myImage을 대리자를 초기화); null을 출력합니다. 그러나 인터페이스 작성기가 연결된 것으로 나타 납니까? – dkj

+0

다음을 참조하십시오 : https://developer.apple.com/reference/uikit/uipopoverpresentationcontroller/1622312-passthroughviews – danh

+0

도움 주셔서 감사합니다. 그 특정 UIImageView를 '@property (비 원자 복사) NSArray * passthroughViews;'에 연결하려면 어떻게해야합니까? ? – dkj

답변

1

상호 작용하는 스위치가 팝 오버에 있고 변경하려는 이미지보기가 기본 VC (프리젠 테이션) VC에 있으므로 올바른 방법은 기본 VC를 팝업 오버레이로 만드는 것입니다. 팝 오버 VC의 구현에서

// MyPopoverVC.h 
@protocol PopoverDelegate <NSObject> 
- (void)popover:(MyPopoverVC *)vc changedSwitchTo:(BOOL)on; 
@end 

@interface MyPopoverVC : UIViewController 
@property (nonatomic, weak) id<PopoverDelegate>delegate; 
// ... 
@end 

은 다음 제시부 VC에서
- (IBAction)toggleImage:(UISwitch *)sender { 
    [self.delegate popover:self changedSwitchTo:sender.on]; 
} 

, 즉 <PopoverDelegate> 프로토콜에 부합로 선언 (중요 스위치의 IBAction를는 팝 오버의 VC에 결선되어야한다). 팝 오버를 제시하기 전에 ... 내원 VC에서 또한
MyPopoverVC *myPopoverVC = [[MyPopoverVC alloc] init... 
myPopoverVC.delegate = self; 

이 위임 프로토콜을 구현 ...

- (void)popover:(MyPopoverVC *) changedSwitchTo:(BOOL)on { 
    self.myImage.hidden = !on; 
} 
이상하게