2017-04-23 61 views
0

我需要隱藏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

回答

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 

在酥料餅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; 
} 
相關問題