gpt4 book ai didi

ios - 关闭 iPad 中的 native UIActionsheet 和 UIPopover

转载 作者:行者123 更新时间:2023-11-29 03:36:35 26 4
gpt4 key购买 nike

此问题涉及当从 iPad 的 Web View / TextView 中选择电话号码或电子邮件时显示操作表和弹出窗口的 native iOS 功能。如果您需要复习一下,操作表包含两个按钮,分别是“添加到联系人”和“复制”。我所指的弹出窗口是用户选择“添加到联系人”按钮时显示的内容。

据我所知,要关闭弹出窗口,需要声明:

[somePopoverController dismissPopoverAnimated:YES];

要关闭操作表,只需调用:

[someActionSheet dismissWithClickedButtonIndex:0 animated:YES];

但是,我的问题是,由于 iOS 为我创建了这些操作表/弹出窗口,所以我不拥有它们,并且无法引用它们来调用解雇方法。

我需要这样做的用例是因为我的应用程序将在指定的无事件时间后注销用户。当用户注销时,即使我输入了新的 View Controller 并删除了旧的 View Controller ,这些操作表/弹出窗口仍然保留在屏幕上。

有谁知道如何引用这些我不拥有的弹出窗口和操作表?任何建议将不胜感激!

最佳答案

嗯,我找到了一个解决方案,可以在检测 iPad 上的电话号码/电子邮件时忽略 UIActionSheets 和从 Webviews/Textviews 创建的弹出窗口。解决方案基本上是使用递归迭代我的所有 View ,直到找到我想要忽略的 View 。很多功劳都归功于我在这篇文章Accessing UIPopoverController for UIActionSheet on iPad中找到的答案。 .

删除 UIActionSheets:

BOOL IsActionOpen(UIView* aView) {
BOOL actionOpen = NO;
if (aView) {
if ([aView isKindOfClass:[UIActionSheet class]]) {
actionOpen = YES;
[(UIActionSheet *)aView dismissWithClickedButtonIndex:0 animated:NO];
}
else if (aView.subviews.count > 0) {
for (UIView* aSubview in aView.subviews) {
if ( IsActionOpen( aSubview)) {
if ([aView isKindOfClass:[UIActionSheet class]]) {
actionOpen = YES;
[(UIActionSheet *)aView dismissWithClickedButtonIndex:0 animated:NO];
}break;
}
}
}
}
return actionOpen;
}

- (void) removeActionSheetIfShowing {
BOOL actionOpen = NO;
for (UIWindow* w in [UIApplication sharedApplication].windows) {
actionOpen = IsActionOpen(w);
if (actionOpen)
break;
}
}

要删除从生成的 UIActionSheet 中选择“添加到联系人”按钮时创建的弹出窗口:

BOOL IsPopOverOpen(UIView* aView) {
BOOL popOverOpen = NO;
if (aView) {
//popover is a popoverview, not a popovercontroller. We find it by checking if UIPopoverBackgroundView exists
if([aView isKindOfClass:[UIPopoverBackgroundView class]]){
popOverOpen = YES;
[aView.superview removeFromSuperview];
}
else if (aView.subviews.count > 0) {
for (UIView* aSubview in aView.subviews) {
if ( IsPopOverOpen( aSubview)) {
if([aView isKindOfClass:[UIPopoverBackgroundView class]]){
popOverOpen = YES;
[aView.superview removeFromSuperview];
}break;
}
}
}
}
return popOverOpen;
}

- (void) removePopOverIfShowing {
BOOL popOverOpen = NO;
for (UIWindow* w in [UIApplication sharedApplication].windows) {
popOverOpen = IsPopOverOpen(w);
if (popOverOpen)
break;
}
}

关于ios - 关闭 iPad 中的 native UIActionsheet 和 UIPopover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098264/

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