iOS 13中的新增功能,三个手势被解释为要求撤消和重做:
用三个手指双击意味着撤消。
用三个手指向左滑动表示撤消操作。
用三根手指向右快速表示重做。
在哪里可以检测到这些手势的手势识别器?我该怎么做才能覆盖它们,将其关闭或在它们与我自己的手势之间进行仲裁?
答案 0 :(得分:2)
好像有一个名为UIUndoGestureRecognizer
的私有类,它连接到UIEditingOverlayGestureView
上,该类位于UIInputSetContainerView
内的UITextEffectsWindow
中。 (要弄清楚这一点,我在UndoManager
的{{1}}处理程序中放置了一个断点,并尝试用三根手指向左滑动,然后在生成的堆栈跟踪和汇编代码中四处寻找,直到找到手势识别器实例。)
您可能可以使用registerUndo
中的方法在手势识别器和这些系统识别器之间进行仲裁,并且可以在视图控制器中覆盖UIGestureRecognizerDelegate
或按顺序返回editingInteractionConfiguration
完全关闭它们。
答案 1 :(得分:-1)
它是通过系统统一的,因此,如果您使用的是Parent Permit Sub Permit Value Total
0 BLD-00045 NaN 70000
1 ELE-2019 BLD-00045 100
2 PLM-2019 BLD-00046 200
---------__
Parent Permit Sub Permit Value Total
0 BLD-00045 NaN 70000
1 ELE-2019 BLD-00045 0
2 PLM-2019 BLD-00046 200
(More details)或UndoManager
,则它是完全免费的。因此,如果您像使用摇杆一样实现它,那么它也适用于手势。
您可以使用以下变量更改其配置:
NSUndoManager
它是一个枚举:
public protocol UIResponder {
var editingInteractionConfiguration: UIEditingInteractionConfiguration
}
因此它会禁用,例如:
public enum UIEditingInteractionConfiguration {
case `default` // System behavior
case none // Disable
}
WWDC 2019-Modernizing Your UI for iOS 13 - 37:00
请注意,iOS 13中还有更多手势,例如,将3根手指按 in 会复制所选文本,并向外 >将其粘贴。它们都与此协议一起连接到旧式动作(例如经典的 shake 动作),您可以在任何override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none }
中覆盖它。
Apple将所有这些编辑手势都调用,您会看到the session here
该会话中的某些信息并非完全正确,例如注释中提到的@matt(例如,responder
不是UIResponder
,实际上是protocol
)。但是我添加了此答案的来源,您可以自己判断。