gpt4 book ai didi

iOS:使用 popOver 中的按钮关闭由 Interface Builder 生成的 popOver

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:15 24 4
gpt4 key购买 nike

我有一个指向 popOver 的按钮,所有按钮都是在 Interface Builder 中创建的。当我按下它外面的某个地方时,popOver 会关闭,但我也想在 popOver 中实现一个按钮来执行此操作。

我在 2011 年找到了 Giorgio Barchiesi 的解决方案,但我未能实现它。这是他的解决方案:

在源 View Controller 的实现文件中:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) {
MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController];
UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
[viewController setPopoverController:[popoverSegue popoverController]];
}
}

在目标 View Controller 的头文件中:

@property (weak, nonatomic) UIPopoverController* popoverController;

在目标 View Controller 的实现文件中:

@synthesize popoverController;

同一个文件,只要你想关闭弹出窗口:

[popoverController dismissPopoverAnimated:YES];

我可以在按下按钮时调用最后一个函数。我的问题是 XCode 在 [viewController setPopoverController:[popoverSegue popoverController]] 行上给我一个错误:ARC 语义问题:选择器“setPopOverController”没有已知的类方法

我错过了什么?

最佳答案

这是我使用的方法:

打开你的 Storyboard文件,选择 segue 箭头并打开属性检查器(选项 - 命令 - 4)和标识符填写一个合理的名称,如“myPopoverSegue”。

在您的源 View Controller 中,在@implementation 之后定义一个变量:

@implementation ViewController
{
__weak UIPopoverController *myPopover;
}

然后,再次在 Source VC 中:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:[dict objectForKey:@"myPopoverSegue"]]) {//@"segue" is your segue name. You can use isKindOfClass as you do currently, I prefer this method.
myPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
}

-(void)closePopover{
[myPopover dismissPopoverAnimated:YES];
}

在你的 Source VC 的 viewDidLoad 方法的最后写:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closePopover) name:@"popoverShouldDismiss" object:nil];

最后,当您想要关闭弹出窗口时:

 [[NSNotificationCenter defaultCenter] postNotificationName:@"popoverShouldDismiss" object:nil];

希望对您有所帮助!这样,您还可以在不更改代码的情况下将 segue 更改为不同的 Controller 。

关于iOS:使用 popOver 中的按钮关闭由 Interface Builder 生成的 popOver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com