从弹出窗口中的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连接到插座和动作。
请帮忙,谢谢。
答
由于正在交互的交换机位于弹出窗口上,而我们想要更改的图像视图位于底层(呈现)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;
}
奇怪的是,的NSLog(@ “%@”,self.myImage );输出为空。 但是在界面生成器中显示为已连接? – dkj
请参阅:https://developer.apple.com/reference/uikit/uipopoverpresentationcontroller/1622312-passthroughviews – danh
感谢您的帮助。如何将特定的UIImageView链接到'@property(nonatomic,copy)NSArray * passthroughViews;' ? –
dkj