Saya sedang menulis aplikasi Tambang sederhana untuk membantu saya mengenal SwiftUI. Karena itu, saya ingin klik primer (biasanya LMB) untuk "menggali" (mengungkapkan apakah ada tambang di sana), dan klik sekunder (biasanya RMB) untuk menempatkan bendera.
Saya memiliki penggalian yang bekerja! Tapi saya tidak tahu bagaimana cara menempatkan bendera, karena saya tidak tahu cara mendeteksi klik sekunder.
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.gesture(TapGesture().onEnded(self.handleUserDidTap(square)))
Seperti yang saya katakan sebelumnya, fungsi yang dikembalikan oleh handleUserDidTap
disebut dengan benar pada klik, tetapi yang dikembalikan handleUserDidAltTap
hanya dipanggil ketika saya menahan tombol Kontrol. Itu masuk akal karena itulah yang dikatakan kode ... tapi saya tidak melihat API apa pun yang dapat membuatnya mendaftar klik sekunder, jadi saya tidak tahu harus berbuat apa lagi.
Saya juga mencoba ini, tetapi perilakunya tampak identik:
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.onTapGesture(self.handleUserDidTap(square))
sumber
.onTapGesture()
coba lihat..gesture(TapGesture().onEnded(.......))
Jawaban:
Sebagaimana SwiftUI berdiri sekarang, ini tidak mungkin secara langsung. Saya yakin ini akan terjadi di masa depan, tetapi saat ini, hal
TapGesture
itu jelas difokuskan terutama pada kasus penggunaan iOS yang tidak memiliki konsep "klik kanan" jadi saya pikir itu sebabnya ini diabaikan. Perhatikan konsep "pers lama" adalah warga negara kelas satu dalam bentukLongPressGesture
, dan itu hampir secara eksklusif digunakan dalam konteks iOS, yang mendukung teori ini.Yang mengatakan, saya menemukan cara untuk membuat ini berhasil. Yang harus Anda lakukan adalah kembali ke teknologi yang lebih lama, dan menanamkannya ke tampilan SwiftUI Anda.
Saya menguji ini, dan itu berhasil bagi saya di dalam aplikasi SwiftUI yang cukup kompleks. Pendekatan dasar di sini adalah:
NSView
.NSViewRepresentable
.Bukan solusi yang ideal, tetapi mungkin cukup baik untuk saat ini. Saya harap ini menyelesaikan masalah Anda sampai Apple memperluas kemampuan SwiftUI lebih lanjut.
sumber