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

Posted

技术标签:

【中文标题】从弹出窗口中的 UISwitch 操作中隐藏 UIImageView (iPad)【英文标题】:Hiding UIImageView from UISwitch action in popover (iPad) 【发布时间】:2017-04-23 23:49:04 【问题描述】:

我需要从弹出框内的 UISwitch 触发的操作中隐藏 UIImageView。

我正在使用这段代码,但是在点击 UISwitch 时它什么也没做,可能是因为 UISwitch 在弹出视图中。

此代码在 iPhone 上完美运行,但在 iPad 上无法运行且 UIImageView 不会隐藏。为什么?

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

UIImageView 连接到插座,UISwitch 连接到插座和动作。

请帮忙,谢谢。

【问题讨论】:

奇怪的是,NSLog(@"%@",self.myImage);输出空值。但是在 Interface Builder 中显示为已连接? 看这个:developer.apple.com/reference/uikit/… 感谢您的帮助。如何将特定的 UIImageView 链接到 '@property(nonatomic, copy) NSArray *passthroughViews;' ? 您能介绍一下视图是如何排列的吗?开关和图像视图都不是在弹出框上,而是在底层视图上? 图像视图在主父视图上(来自最初的 ViewController),并且在点击按钮时出现的弹出框内切换。 【参考方案1】:

由于与之交互的开关位于弹出框上,而我们要更改的图像视图位于底层(呈现)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

在 Popover VC 的实现中(重要提示:开关的 IBAction 应该连接到 popover vc)...

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

在呈现的vc中,声明它符合&lt;PopoverDelegate&gt;协议。在呈现弹出框之前,初始化委托...

MyPopoverVC *myPopoverVC = [[MyPopoverVC alloc] init...
myPopoverVC.delegate = self;

同样在呈现的vc中,实现委托协议...

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

【讨论】:

以上是关于从弹出窗口中的 UISwitch 操作中隐藏 UIImageView (iPad)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI - Datepicker - 隐藏年份

无法从弹出窗口中的日历为 UITextField 设置值

从弹出窗口上的编辑文本中获取文本

Kendo Grid - 从弹出窗口编辑后刷新行

从弹出窗口在父窗口中提交表单?

从弹出窗口呈现视图