从弹出窗口中的UISwitch动作中隐藏UIImageView(iPad)

问题描述:

我需要隐藏UIImageView,该动作由弹出窗口中的UISwitch触发。从弹出窗口中的UISwitch动作中隐藏UIImageView(iPad)

我正在使用这段代码,但它在点击UISwitch时没有做任何事情,可能是因为UISwitch里面有一个弹窗视图。

此代码在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 );输出为空。 但是在界面生成器中显示为已连接? – dkj

+0

请参阅:https://developer.apple.com/reference/uikit/uipopoverpresentationcontroller/1622312-passthroughviews – danh

+0

感谢您的帮助。如何将特定的UIImageView链接到'@property(nonatomic,copy)NSArray * passthroughViews;' ? – dkj

由于正在交互的交换机位于弹出窗口上,而我们想要更改的图像视图位于底层(呈现)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为应当连接到酥料饼VC)...

- (IBAction)toggleImage:(UISwitch *)sender { 
    [self.delegate popover:self changedSwitchTo:sender.on]; 
} 

在呈现VC,声明为符合该<PopoverDelegate>协议。呈现酥料饼之前,初始化委托...

MyPopoverVC *myPopoverVC = [[MyPopoverVC alloc] init... 
myPopoverVC.delegate = self; 
在呈现VC

而且,实现委托协议...

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