iOS UIActionSheet 从按钮上的长按手势呈现,错误地需要双击按钮才能关闭

2024-01-08

我有一个选项卡栏应用程序,在其中一个选项卡中我有一个 MKMapView。在此视图中,我的 viewDidLoad 正在初始化 UIButton 的长按手势识别器。当按下此按钮并帮助时,它会显示一个包含 5 个按钮 + 取消按钮的 UIActionSheet。每个按钮代表一个缩放级别:“世界”、“国家”、“州”、“城市”、“当前位置”。选择 UIActionSheet 中的按钮会将底层 MKMapView 缩放到该级别。

我遇到的问题是所有按钮(包括取消按钮)都需要双击才能关闭 UIActionSheet。这不是预期的行为——它应该像其他 UIActionSheet 一样在按下按钮一次后关闭。第一次按下后,我可以看到地图缩放到 UIActionSheet 后面的适当级别,因此我知道触摸正在正确的按钮上注册,但按钮在第一次按下时不会突出显示蓝色,并且 UIActionSheet 不会关闭。直到我第二次按下按钮,它才会突出显示蓝色,然后关闭。

如果我删除长按手势识别器并在“内部触摸”上显示 UIActionSheet,那么一切都会按预期进行。所以我知道这个手势在某种程度上造成了干扰,有什么修复或解决方法的想法吗?或者这是一个应该向 Apple 报告的错误吗?

- (void) viewDidLoad {
    // intitialize longpress gesture
    UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc]
                                                         initWithTarget:self 
                                                         action:@selector(zoomOptions:)];
    longPressRecognizer.minimumPressDuration = 0.5;
    longPressRecognizer.numberOfTouchesRequired = 1;
    [self.currentLocationButton addGestureRecognizer:longPressRecognizer];
}

- (IBAction) zoomOptions:(UIGestureRecognizer *)sender {
    NSString *title = @"Zoom to:";
    UIActionSheet *zoomOptionsSheet = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"World", @"Country", @"State", @"City", @"Current Location", nil];  

    [zoomOptionsSheet showFromTabBar:appDelegate.tabbarController.tabBar];
}

安娜·卡列尼娜 https://stackoverflow.com/users/467105/anna-karenina是对的,并且link https://stackoverflow.com/questions/7688329/uilongpressgesturerecognizer-on-uitableviewcell-double-call/7688584#7688584提供帮助我弄清楚了。基本上,UILongPressGestureRecognizer是一个经历各种状态变化的“连续手势”。我需要检查适当的状态,就我而言是UIGestureRecognizerStateBegan因为我想要UIActionSheet在按住按钮之后但在释放并停止手势之前呈现。我所要做的就是结束演示文稿UIActionSheet在检查适当状态的 if 语句中。现在它按预期工作了。

- (IBAction) zoomOptions:(UILongPressGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSString *title = @"Zoom to:";
        UIActionSheet *zoomOptionsSheet = [[UIActionSheet alloc] 
                                            initWithTitle:title 
                                                 delegate:self 
                                        cancelButtonTitle:@"Cancel"
                                   destructiveButtonTitle:nil 
                                        otherButtonTitles:@"World", @"Country",                
                                                          @"State", @"City", 
                                                          @"Current Location", nil];  
        [zoomOptionsSheet showFromTabBar:appDelegate.tabbarController.tabBar];
    } 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS UIActionSheet 从按钮上的长按手势呈现,错误地需要双击按钮才能关闭 的相关文章

随机推荐

  • 无法在asp.net core中使用ajax将json发布到控制器

    我有以下代码 控制器动作方法 HttpPost public async Task
  • 有没有一种方法可以比较阿拉伯字符而不考虑它们的首/中/尾形式?

    在拉丁字母中 字母有大写和小写两种形式 在Python中 如果你想比较两个字符串而不考虑它们的大小写 你可以使用以下命令将它们转换为相同的大小写 string upper or string lower 在阿拉伯文字中 字母可以有词首 词尾
  • 聚合 MongoDB 中的不同值

    我有一个 mongodb 数据库 有 18625 个集合 它有以下键 id ObjectId 5aab14d2fc08b46adb79d99c game id NumberInt 4 score phrase Great title NHL
  • 长时间尝试语句

    将函数的大部分代码放在一个函数中是否有任何缺点 try statement 如果我做某事需要try statement 我通常最终会在 try 语句中为该函数做很多工作 因为我通常在那里声明我的变量 并且如果我这样做 就不能在该范围之外使用
  • 从 UART 接收的数据中获取子字符串并放入 LCD

    发布为基于的新问题this one https stackoverflow com questions 59559083 is there string in c OP 最初对已回滚的问题进行了巨大更改 因为用户表示他们无法自己提出问题 A
  • Python 与 Ruby 进行元编程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在导入模块期间访问 PrivateData

    我想加载 config xml 文件的内容并将其存储在 PrivateData当我的模块加载时 这是我的 PSD1 中的定义行 Private data to pass to the module specified in ModuleTo
  • 使用 WPF shell 集成库最大化时窗口超出屏幕

    我正在使用WPF Shell 集成库 http code msdn microsoft com WPFShell创建我的 wpf 应用程序的自定义 chrome 一切都很好 但是当最大化应用程序时 屏幕外会出现 6 或 7 个像素 这是我正
  • 是否有 link.exe 的替代链接器?

    我正在开发一个代理 DLL 并希望导出其中包含 字符的符号 然而 这个字符似乎对 link exe 有特殊含义 我猜实际上是对 lib exe 给定一个 C 文件 extern C void f I can创建一个导出的 DLLf as f
  • 复杂表达式中的后缀增量运算符究竟何时计算?

    说我有这样的表情 short v p i 0xFF lt lt 4 p i 0xF0000000 gt gt 28 with p是一个指向动态分配的 32 位整数数组的指针 When exactly will i会增加吗 我注意到上面的代码
  • 克隆 JavaScript 事件对象

    有人知道如何对本机 javascript 事件对象进行深度复制 克隆吗 我知道我可以创建一个新的事件对象并手动设置适当的属性以匹配原始事件 但如果有一种方法可以克隆 那就容易多了 上面的代码不会正确复制任何 getter setter 尝试
  • 如何在c中模拟闭包

    有简单的方法吗 这是一个相当广泛的问题 从根本上讲 闭包是一个指令指针以及一些以正确方式执行指令所需的存储上下文 您当然可以在 C 中使用结构体和函数指针将类似的东西组合在一起 假设您表达一个接受两个 int 并返回 void 作为结构的闭
  • 未找到“默认”的 Docker 端点

    我确实克隆了一个项目 并且在第一步中 当我尝试启动容器时 我在项目根目录中运行了 windows CMD 然后输入以下命令 docker compose up build 并向我显示此消息 找不到 默认 的 docker 端点 如果有人帮助
  • 使用 df.to_csv() 的编码错误

    我正在尝试将 Twits 中的信息 屏幕名称 创建位置和文本 保存到 pandas DataFrame 中 然后将 DataFrame 保存为 csv 文件 我收到编码错误 import tweepy from tweepy import
  • pandas 数据帧上的矢量化查找

    我有两个 DataFrame df1是一个表 我需要使用从 df2 中的多个列检索的索引 列对来提取值 我看到有一个函数get value当给定索引和列值时 它可以完美地工作 但是当尝试向量化此函数以创建新列时 我失败了 df1 pd Da
  • 如何将我的 Android 应用程序 Google 地图半径圆替换为如图所示的蓝色半透明圆?

    如何将我的 Android 应用程序 Google 地图半径圆替换为蓝色半透明圆 如图所示 还有带有蓝色圆的蓝色标记 我可以使圆圈具有特定的轮廓并填充 但它看起来并不像下图所示的那么好 我怎么做 到目前为止我的代码也在下面 Code pri
  • VS 2012 发布:找不到有效的 AspnetMergePath

    我刚刚安装了 Visual Studio 2012 的 Update 2 它引入了一个新的 发布 对话框 我试图让它做以前做的事情 在发布之前预编译网站 但我遇到了错误 Can t find the valid AspnetMergePat
  • Android M startActivity电池优化

    我正在开发一个应用程序 如果用户靠近某个地方 它应该提醒用户 当然 如果手机处于空闲状态 也必须这样做 现在有了 DOZE 我明白我必须将我的应用程序列入白名单 并且为了做到这一点 我看到我可以通过操作请求启动一个意图 这要归功于 Budd
  • 在 Selenium 中为 Chrome 驱动程序设置代理

    我正在使用 Selenium Webdriver 在 Chrome 浏览器中使用 C 进行自动化 我需要检查我的网页是否在某些地区 某些 IP 范围 被阻止 所以我必须在 Chrome 浏览器中设置代理 我尝试了下面的代码 正在设置代理 但
  • iOS UIActionSheet 从按钮上的长按手势呈现,错误地需要双击按钮才能关闭

    我有一个选项卡栏应用程序 在其中一个选项卡中我有一个 MKMapView 在此视图中 我的 viewDidLoad 正在初始化 UIButton 的长按手势识别器 当按下此按钮并帮助时 它会显示一个包含 5 个按钮 取消按钮的 UIActi