有没有办法知道弹出框是从哪里出现的?
Posted
技术标签:
【中文标题】有没有办法知道弹出框是从哪里出现的?【英文标题】:Is there anyway to know where a popover was presented from? 【发布时间】:2012-08-07 14:50:40 【问题描述】:我正在编写一个 iPad 应用程序,我的一个屏幕上有很多小按钮,当按下这些按钮时,会在源自该按钮的弹出框中显示一个文本句子。目前所有弹出框都是使用情节提要创建的,我将弹出框控制器存储在我的UIViewController
中:
@property (nonatomic, strong) UIPopoverController *myPopoverController;
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])
UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
self.myPopoverController = popoverSegue.popoverController;
但是,我想不出一个处理轮换的好方法。对了,我的didRotate
方法看起来像这样:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
if (self.myPopoverController)
[self.myPopoverController dismissPopoverAnimated: NO];
[self.myPopoverController presentPopoverFromRect:?????? inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];
但是,鉴于弹出框可能源自我屏幕上的任何小按钮,我不知道从哪里显示它们。有什么建议么?请记住,这些都是非常简单的弹出框,因此一大堆新代码并不理想。
【问题讨论】:
【参考方案1】:您最好的选择可能是在主视图控制器中创建另一个属性,以保持对按下按钮的引用。类似的东西:
@property (nonatomic, strong) UIPopoverController *myPopoverController;
@property (nonatomic, weak) UIView *popoverButton;
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])
UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
self.myPopoverController = popoverSegue.popoverController;
//The sender in prepareForSegue should be the view used to initiate the segue.
popoverButton = (UIView *)sender;
完成后,您可以修改轮换代码:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
if (self.myPopoverController)
[self.myPopoverController dismissPopoverAnimated: NO];
[self.myPopoverController presentPopoverFromRect:popoverButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];
保持对按下按钮的引用不会占用存储指针的更多资源,并且保持引用弱应该避免保留循环(毕竟,您的视图控制器不拥有按钮,按钮的超级视图拥有它)。
【讨论】:
以上是关于有没有办法知道弹出框是从哪里出现的?的主要内容,如果未能解决你的问题,请参考以下文章
appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)
appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)