কীভাবে কোনও ইউআইএলবেলকে ক্লিকযোগ্যযোগ্য করবেন?


136

আমি একটি ইউআইএলবেলকে ক্লিকযোগ্য করে তুলতে চাই।

আমি এটি চেষ্টা করেছি, কিন্তু এটি কার্যকর হয় না:

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        let tap = UITapGestureRecognizer(target: self, action: Selector("tapFunction:"))
        tripDetails.addGestureRecognizer(tap)
    }

    func tapFunction(sender:UITapGestureRecognizer) {
        print("tap working")
    }
}

4
আপনার ফ্রেম কি UILabel? আপনি কি লেবেলের ফ্রেমে স্পর্শ করছেন তা নিশ্চিত? আপনার কি UIViewsলেবেলটি coveringেকে আছে ? হয় userInteractionEnabledসেট Trueলেবেলের জন্য?
জাল

নিশ্চিত হয়ে নিন যে আপনার ইউআইএলবেল আইবিউটলেটটি আপনার নিব বা স্টোরিবোর্ড থেকে
আবদ্ধ হয়েছে

উত্তর:


178

আপনি কি লেবেলে সেট isUserInteractionEnabledকরার trueচেষ্টা করেছেন tripDetails? এই কাজ করা উচিত.


1
উত্তর করার জন্য ধন্যবাদ!!! এখানে আমি UITapGestureRecognizer সম্পর্কে এখনও অন্য সমস্যা আছে stackoverflow.com/questions/33659078/...
ড্যানিয়েল বি

আমি ট্যাপের পটভূমির রঙ পরিবর্তন করার চেষ্টা করছি তবে আমি আমার আঙুলটি ছেড়ে দিলে ট্যাপ ইভেন্টটি গুলি চালাচ্ছে। টাচ ডাউন ইভেন্টটি ধরার কোনও উপায় আছে? দীর্ঘ প্রেস আমি যা খুঁজছি তা নয়।
নুমান কারাআসলান

109

সুইফট 3 আপডেট

প্রতিস্থাপন করা

Selector("tapFunction:")

সঙ্গে

#selector(DetailViewController.tapFunction)

উদাহরণ:

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...

        let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction))
        tripDetails.isUserInteractionEnabled = true
        tripDetails.addGestureRecognizer(tap)
    }

    @objc
    func tapFunction(sender:UITapGestureRecognizer) {
        print("tap working")
    }
}

আমার সাথে ট্যাপ ফাংশনটি টিকিয়ে দিতে হয়েছিল @objc
স্কট ডি স্ট্রেডার

46

সুইফট 4 আপডেট

 @IBOutlet weak var tripDetails: UILabel!

 override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(GameViewController.tapFunction))
    tripDetails.isUserInteractionEnabled = true
    tripDetails.addGestureRecognizer(tap)
}

@objc func tapFunction(sender:UITapGestureRecognizer) {

    print("tap working")
}

15

সুইফট 3 আপডেট

yourLabel.isUserInteractionEnabled = true

1
এই আমাকে সাহায্য করেনি। আমি এটি একটি টেবিলভিউতে লেবেলে করার চেষ্টা করছি
পাভলোস

এটি ইতিমধ্যে স্টোরিবোর্ডে সেট করা থাকলেও এখানে এটি কাজ করে তোলে।
ব্রেণারে

14

সুইফট 5

@ লিওরকো এর মতো, তবে @ আইবিএসিএকে দিয়ে @objc প্রতিস্থাপন করা দরকার ।

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...

        let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction))
        tripDetails.isUserInteractionEnabled = true
        tripDetails.addGestureRecognizer(tap)
    }

    @IBAction func tapFunction(sender: UITapGestureRecognizer) {
        print("tap working")
    }
}

এটি এক্সকোড 10.2 এ কাজ করছে।


2
@IBActionএক্সকোডের ইন্টারফেস বিল্ডার (অতএব আইবি) এর কাছে কেবল পদ্ধতি উন্মুক্ত করার প্রয়োজন। এছাড়া হিসাবে কাজ করে @objcকিন্তু আপনি যদি কোড সহ অঙ্গভঙ্গি বা অন্যান্য কর্ম যোগ করেন তারা আপনার ব্যবহার করা উচিত @objcটীকা
আদম

7

ভাল এবং সুবিধাজনক সমাধান:

আপনার ভিউকন্ট্রোলারে:

@IBOutlet weak var label: LabelButton!

override func viewDidLoad() {
    super.viewDidLoad()

    self.label.onClick = {
        // TODO
    }
}

আপনি এটিকে আপনার ভিউকন্ট্রোলার বা অন্য একটি। সুইফট ফাইলে রাখতে পারেন (যেমন কাস্টমভিউ.সউইফ্ট):

@IBDesignable class LabelButton: UILabel {
    var onClick: () -> Void = {}
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        onClick()
    }
}

স্টোরিবোর্ডে লেবেল এবং "পরিচয় পরিদর্শক" তে মাঠের শ্রেণীর নির্বাচন করুন লেবেল বাটন নির্বাচন করুন right

লেবেল অ্যাট্রিবিউট ইন্সপেক্টর "ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম করা" সক্ষম করতে ভুলবেন না


3

আপনাকে সেই লেবেলের ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম করতে হবে .....

যেমন যেমন

yourLabel.userInteractionEnabled = true


এই আমাকে সাহায্য করেনি। আমি এটি একটি টেবিলভিউতে লেবেলে করার চেষ্টা করছি
পাভলোস

2

সুইচ ৩.০ এর জন্য আপনি অঙ্গভঙ্গির দীর্ঘ প্রেসের সময়কালও পরিবর্তন করতে পারেন

label.isUserInteractionEnabled = true
let longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer.init(target: self, action: #selector(userDragged(gesture:))) 
longPress.minimumPressDuration = 0.2
label.addGestureRecognizer(longPress)

1

আমি যেমন করেছি তেমন উপেক্ষা করা সহজ, তবে UITapGestureRecognizerপরিবর্তে ব্যবহার করতে ভুলবেন না UIGestureRecognizer


-4

উপরের সমাধানটিতে বর্ণিত হিসাবে আপনার ব্যবহারকারীর ইন্টারঅ্যাকশনটি প্রথমে সক্ষম করা উচিত এবং আলতো চাপতে হবে

এই কোড ব্যবহার করে পরীক্ষা করা হয়েছে

সুইফট 4 - এক্সকোড 9.2

yourlabel.isUserInteractionEnabled = true
yourlabel.addGestureRecognizer(UITapGestureRecognizer(){
                //TODO 
            })

আমি Cannot invoke initializer for type 'UITapGestureRecognizer' with an argument list of type '(() -> Void)'চেষ্টা করার সময় আমি পেয়েছি।
লাইওনেলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.