Я пишу простое приложение Mines, чтобы помочь мне узнать SwiftUI. Поэтому я хочу, чтобы первичный щелчок (обычно ЛКМ) «копал» (показывает, есть ли там мина), и вторичный щелчок (обычно юань), чтобы установить флаг.
У меня копание работает! Но я не могу понять, как разместить флаг, потому что я не могу понять, как обнаружить вторичный щелчок.
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.gesture(TapGesture().onEnded(self.handleUserDidTap(square)))
Как я подразумевал ранее, функция, возвращаемая функцией, handleUserDidTap
вызывается правильно при щелчке, но функция, возвращаемая функцией , handleUserDidAltTap
вызывается только тогда, когда я удерживаю клавишу «Control». Это имеет смысл, потому что это то, что говорит код ... но я не вижу API, который мог бы заставить его регистрировать вторичные клики, поэтому я не знаю, что еще делать.
Я также попробовал это, но поведение казалось идентичным:
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.onTapGesture(self.handleUserDidTap(square))
источник
.onTapGesture()
проверить это..gesture(TapGesture().onEnded(.......))
Ответы:
Как сейчас обстоят дела со SwiftUI, это невозможно напрямую. Я уверен, что это произойдет в будущем, но на данный момент,
TapGesture
очевидно, основное внимание уделяется сценариям использования iOS, которые не имеют понятия «щелчка правой кнопкой мыши», поэтому я думаю, именно поэтому это было проигнорировано. Обратите внимание, что концепция «длинного нажатия» - это первоклассный гражданин в формеLongPressGesture
, и это почти исключительно используется в контексте iOS, который поддерживает эту теорию.Тем не менее, я нашел способ сделать эту работу. Что вам нужно сделать, так это воспользоваться старой технологией и внедрить ее в представление SwiftUI.
Я проверил это, и оно работало для меня в довольно сложном приложении SwiftUI. Основной подход здесь:
NSView
.NSViewRepresentable
.Не идеальное решение, но оно может быть достаточно хорошим прямо сейчас. Я надеюсь, что это решит вашу проблему, пока Apple не расширит возможности SwiftUI.
источник