আমি কীভাবে সুইফটউআই-তে ডান-ক্লিক সনাক্ত করতে পারি?


10

আমি সুইফটইউআই সম্পর্কে জানতে সাহায্যের জন্য একটি সাধারণ খনি অ্যাপ্লিকেশন লিখছি। এর মতো, আমি প্রাথমিক ক্লিক (সাধারণত এলএমবি) "খনন" করতে (সেখানে কোন খনি আছে কিনা তা প্রকাশ করে) এবং একটি পতাকা রাখতে সেকেন্ডারি ক্লিক (সাধারণত আরএমবি) চাই।

আমি খনন কাজ করছি! তবে আমি কীভাবে একটি পতাকা স্থাপন করব তা অনুগ্রহ করতে পারি না, কারণ আমি কীভাবে দ্বিতীয় ক্লিকটি সনাক্ত করতে পারি তা বুঝতে পারি না।

আমি যা চেষ্টা করছি তা এখানে :

BoardSquareView(
    style: self.style(for: square),
    model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.gesture(TapGesture().onEnded(self.handleUserDidTap(square)))

যেমনটি আমি আগেই বলেছি, ফাংশনটি ফিরিয়ে দেওয়া handleUserDidTapহয়েছে ক্লিকের জন্য সঠিকভাবে বলা হয়, তবে যেটি ফিরে আসে handleUserDidAltTapকেবল তখনই ডাকা হয় যখন আমি নিয়ন্ত্রণ কী ধরে রাখি। এটি অর্থবোধ করে কারণ এটাই কোড বলে ... তবে আমি এমন কোনও এপিআই দেখতে পাচ্ছি না যা এটির মাধ্যমিক ক্লিকগুলি নিবন্ধভুক্ত করতে পারে, তাই অন্য কী করতে হবে তা আমি জানি না।

আমি এটিও চেষ্টা করেছি, তবে আচরণটি অভিন্ন বলে মনে হয়েছিল:

BoardSquareView(
    style: self.style(for: square),
    model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.onTapGesture(self.handleUserDidTap(square))

1
আপনার প্রথম লিঙ্কটি নষ্ট হয়ে গেছে। প্রাইভেট রেপো?
গিল বিরমন

.onTapGesture() এটা দেখ.
রেমন্ড

উফফফ, আপনি ঠিক @ গিলবির্মণ! ফিক্সড; সে সম্পর্কে দুঃখিত
বেন লেগিগারো

@ রেমন্ড আমি প্রথমে চেষ্টা করেছিলাম। আমি যদি .gesture(TapGesture().onEnded(.......))
কোনও

উত্তর:


4

এখনই জিনিসগুলি যেমন সুইফটুআইয়ের সাথে দাঁড়িয়েছে, এটি সরাসরি সম্ভব নয়। আমি নিশ্চিত যে এটি ভবিষ্যতে হবে তবে এই মুহূর্তে TapGestureস্পষ্টতই মূলত আইওএস ব্যবহারের ক্ষেত্রে মনোনিবেশ করা হয়েছে যার "ডান ক্লিক" এর ধারণা নেই তাই আমি মনে করি এ কারণেই এটিকে উপেক্ষা করা হয়েছিল। লক্ষ করুন যে "লং প্রেস" ধারণাটি রূপের মধ্যে প্রথম শ্রেণির নাগরিক এবং এটি LongPressGestureপ্রায় একচেটিয়াভাবে আইওএস প্রসঙ্গে ব্যবহৃত হয়, যা এই তত্ত্বকে সমর্থন করে।

এটি বলেছিল, আমি এই কাজটি করার একটি উপায় বের করেছি। আপনাকে যা করতে হবে তা পুরানো প্রযুক্তির পিছনে পড়ে এবং এটি আপনার সুইফটুআই ভিউতে এম্বেড করা।

struct RightClickableSwiftUIView: NSViewRepresentable {
    func updateNSView(_ nsView: RightClickableView, context: NSViewRepresentableContext<RightClickableSwiftUIView>) {
        print("Update")
    }

    func makeNSView(context: Context) -> RightClickableView {
        RightClickableView()
    }

}

class RightClickableView : NSView {
    override func mouseDown(with theEvent: NSEvent) {
        print("left mouse")
    }

    override func rightMouseDown(with theEvent: NSEvent) {
        print("right mouse")
    }
}

আমি এটি পরীক্ষা করেছি এবং এটি আমার জন্য মোটামুটি জটিল সুইফটআইআই অ্যাপ্লিকেশনটির মধ্যে কাজ করেছে। এখানে মৌলিক পদ্ধতিটি হ'ল:

  1. আপনার শ্রবণ উপাদানটি একটি হিসাবে তৈরি করুন NSView
  2. এটি প্রয়োগ করে এমন একটি সুইফটুআই ভিউ দিয়ে মোড়ক করুন NSViewRepresentable
  3. আপনি যেমন চান সেখানে UI তে আপনার বাস্তবায়নটি ঠিকঠাক করুন ঠিক যেমন আপনি অন্য কোনও সুইফটইউআই ভিউয়ের সাথে করেন।

একটি আদর্শ সমাধান নয়, তবে এটি এখনই যথেষ্ট ভাল হতে পারে। আমি আশা করি যতক্ষণ না অ্যাপল সুইফটুআইয়ের ক্ষমতা আরও প্রসারিত করে ততক্ষণ এটি আপনার সমস্যার সমাধান করে।


ধন্যবাদ. এটি মূলত আমি আপাতত করছিলাম । সত্যই দু: খিত যে এটি ফ্রেমওয়ার্কের সাথে তাদের প্রথম ছাপ। আমি এটিকে গ্রহণযোগ্য হিসাবে চিহ্নিত করব (আশা করি 🤞🏼) এর সাথে আরও ভাল সমাধান আসে
বেন লেগজিও

1
Welp; দেখে মনে হচ্ছে এটি আজকের সেরা উত্তর। অনুগ্রহ তোমার! আশা করি কোনও দিন আমাদের একটি সরকারী সমাধান হবে।
বেন লেগিগেরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.