检测到 WatchOS 7.1 WKLongPressGesture,显示警报,但未触发操作关闭

Posted

技术标签:

【中文标题】检测到 WatchOS 7.1 WKLongPressGesture,显示警报,但未触发操作关闭【英文标题】:WatchOS 7.1 WKLongPressGesture detected, alert presented, but action closures not firing 【发布时间】:2020-11-28 16:54:06 【问题描述】:

我正在尝试在我的应用中实现 WKLongPressGestureRecognizer。长按手势被识别并呈现警报。但是,当我选择清除表格的选项(我正在使用 Realm)时,警报控制器被解除,但未清除拍摄。当我尝试通过在代码中添加断点进行调试时,似乎完全跳过了闭包内的代码。知道我错过了什么吗? (我应该使用警报表的操作表吗?)我尝试了很多不同的东西。这是我一直用来调试的带有打印语句的代码。当前没有触发闭包内的打印语句。

@IBAction func handleLongPress(_ sender: Any) 

print("long press pressed")

WKInterfaceDevice.current().play(.click)

let clearAction = WKAlertAction(title: "Clear", style: .destructive) 
    print("clear button pressed")


let cancelAction = WKAlertAction(title: "Cancel", style: .default) 
    print("cancel button pressed")


presentAlert(withTitle: "Are you sure?", message: "Action cannot be undone", preferredStyle: .alert, actions: [clearAction, cancelAction])

print("exiting long press")

感谢您的任何意见或建议。

【问题讨论】:

【参考方案1】:

手势识别器将调用选择器handleLongPress 两次,一次使用状态== began,一次使用状态cancelled。我发现这会导致您描述的 presentAlert 出现问题。

尝试检查began 状态:

@IBAction func handleLongPress(_ sender: WKGestureRecognizer) 
    guard sender.state == .began else 
        return
    
    // rest of handleLongPress implementation goes here

这应该确保您的警报只显示一次。

【讨论】:

以上是关于检测到 WatchOS 7.1 WKLongPressGesture,显示警报,但未触发操作关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WatchOS 上检测桌子的移动?

从 iOS 应用检测用户的 watchOS 版本

iOS WatchOS5 - 如何以编程方式检测 Apple Watch 是不是在特定时间间隔戴在手腕上(佩戴)?

支持OS 7.0的Windows Phone Xap在市场上检测为7.1

在 WatchOS 上移动到不同的屏幕

更新到 watchOS 6 后,滚动视图停止工作,有啥变化吗?