ইউআইএবেবেলে টাচ ইভেন্ট হ্যান্ডলিং এবং এটি আইবিএક્શન পর্যন্ত সজ্জিত


101

ঠিক আছে, তাই আমার কাছে একটি UILabelইন্টারফেস বিল্ডারে একটি তৈরি আছে যা "শুরু করতে আলতো চাপুন" এর কিছু ডিফল্ট পাঠ্য প্রদর্শন করে।

যখন ব্যবহারকারীটি UILabelআমি ট্যাপ করি তখন এটি আইবিএક્શન পদ্ধতিটি ট্রিগার করতে চাই: -(IBAction)next;যা নতুন কিছু বলার জন্য লেবেলের পাঠ্যটিকে আপডেট করে।
এটি সত্যিই সুবিধাজনক হবে যদি এটি আমাকে আমার পদ্ধতি থেকে আমার লেবেলে কোনও সংযোগ টেনে আনার অনুমতি দেয় এবং তারপরে একটি বোতামের মতো ভিতরে টাচ আপ নির্বাচন করে। কিন্তু হায়, সিগার নেই

যাইহোক, আমি আমার প্রশ্ন অনুমান করি, আমি কি UILabelএটি কাজ করতে সাবক্লাস করতে হবে? বা এমন কোনও উপায় আছে যা আমি লেবেলের উপরে একটি বোতাম টেনে আনতে পারি তবে এটি 0% অস্বচ্ছ করে তুলি। বা আমি অনুপস্থিত একটি সহজ সমাধান আছে?

উত্তর:


255

এটা দেখ:

UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];

কৌশলটি হল ব্যবহারকারীর মিথস্ক্রিয়া সক্ষম করা।


1
আমার যদি একাধিক লেবেল থাকে? কোনটি টেপ করা হয়েছিল তার মধ্যে আমি কীভাবে পার্থক্য করব?
শিক্ষার্থী

1
@ বিভাজনকারী ট্যাগ সম্পত্তি চেষ্টা করুন। লেবেলট্যাপের পরিবর্তে লেবেলট্যাপ ব্যবহার নিশ্চিত করুন। এবং ব্যবহার - (শূন্য) লেবেল টেপ: (আইডি) প্রেরক;।
thedjaney

1
@ থেডজানেই প্রেরক হলেন ইউআইটিএপপেশারআরসিগনাইজার, ইউআইএলবেল নয়
h4labs

আলতো চাপের অভ্যন্তরে টাচ আপের মতো নয়, এবং মানব ইন্টারফেসের কনফারেন্স এবং অ্যাক্সেসযোগ্যতা হারাবে।

1
@ h4labs আপনি UITapGestureRecognizer * tapGesture = প্রেরক ব্যবহার করতে পারেন; তারপরে tapGesture.view.tag- এর সাথে লেবেল ট্যাগটি পান
ডিজেটানো

70

ইউআইআইএবিএল ইউআইভিউ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত যা ইউআইআরএসপন্ডার থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। সমস্ত ইউআইএসপেন্ডার অবজেক্ট স্পর্শ ইভেন্টগুলি পরিচালনা করতে পারে। সুতরাং আপনার শ্রেণীর ফাইলে যা আপনার দর্শন (যা ইউআইলাবেল ধারণ করে) বাস্তবায়ন সম্পর্কে জানে:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

ইন্টারফেস বিল্ডারে ইউআইএলবেলের ট্যাগ মান সেট করে। আপনার স্পর্শগুলি বিগান পদ্ধতিতে যখন স্পর্শগুলি দেখা দেয়, ট্যাগটির সাথে সম্পর্কিত ভিউটির ট্যাগ মানটি পরীক্ষা করে দেখুন:

UITouch *touch = [touches anyObject];

if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";

আপনি আপনার ক্লাস ফাইলে আপনার কোডটি আইবিআউটলেট উপসর্গের সাথে আপনার ইউআইএলবেল ইনস্ট্যান্স ভেরিয়েবল ঘোষণা করে ইন্টারফেস বিল্ডারের ইউআইএলবেল অবজেক্টের সাথে সংযুক্ত করুন:

IBOutlet UILabel *label;

তারপরে ইন্টারফেস বিল্ডারে আপনি সেগুলি সংযুক্ত করতে পারেন।


31
একটি নোট, আপনাকে নিশ্চিত করতে হবে যে আপনি ইন্টারফেস বিল্ডারে "ব্যবহারকারী ইন্টারঅ্যাকশন সক্ষম" পরীক্ষা করেছেন, বা এটি কাজ করবে না।
মিডas06

আমি এই পদ্ধতিটি দিয়ে একটি সমস্যা হিট করেছি। ভিউ কন্ট্রোলারটি সরাসরি লোড হয়ে গেলে এটি ঠিকঠাক কাজ করেছিল, কিন্তু যখন আমি একটি এনএভি কন্ট্রোলার তৈরি করি তখন লেবেলযুক্ত কন্ট্রোলারটিকে নাভি কন্ট্রোলারে ঠেলা দেয় এবং তারপরে এটি প্রদর্শিত হয়, স্পর্শগুলি আর লেবেলে পৌঁছে বলে মনে হয় না। কোন ধারনা?
মিডas06

যদি এটি একই দৃষ্টিভঙ্গি নিয়ামক শ্রেণীর হয় যে আপনি এটি চাপ দিচ্ছেন তা কাজ করা উচিত। মনে হচ্ছে অন্য কিছু সামান্য সমস্যা হতে পারে। হতে পারে অন্য প্রশ্ন শুরু করুন এবং কিছু কোড পোস্ট
করুন

5
ট্যাগগুলির প্রয়োজন নেই এমন একটি অনুরূপ পদ্ধতিটি হ'ল স্পর্শ.ভিউটি আপনি যে লেবেলের জন্য সেট করেছেন তার সমান কিনা তা পরীক্ষা করা উচিত। আমি এটি পছন্দ করি, কারণ এটির অর্থ আমার ট্যাগগুলির উপর নজর রাখতে হবে না।
Defragged

দুর্দান্ত সমাধান আমি আপনাকে প্রস্তাব দিচ্ছি যে আপনি যে কোনও ট্যাগকে 0 হিসাবে সেট করবেন না কারণ অন্য কোথাও ক্লিক করলে তার ট্যাগ মান 0 হয় কারণ এটি আপনার ভিউটির সম্ভবত ট্যাগ মান 0 হয়ে যাবে অন্যথায়, আপনি নিজের ভিউটির ট্যাগটি সেট করতে পারেন -1 এর মতো কিছু এবং তারপরে আপনি 0 এর ট্যাগ মানটি অন্য কোথাও অর্থাত্ একটি বোতাম ব্যবহার করতে পারেন
কেভিনল

30

আপনি একটি ইউআইবাটন ব্যবহার করতে পারেন, এটি স্বচ্ছ করতে পারেন, অর্থাত্ কোনও চিত্র ছাড়াই কাস্টম টাইপ করতে পারেন এবং এতে একটি ইউআইএলবেল যুক্ত করতে পারেন (কেন্দ্রিক)। তারপরে স্বাভাবিক বোতামের ইভেন্টগুলি তারে আপ করুন।


আমি সম্মত, কাস্টম বোতামের ধরণটি আপনাকে একটি ইউআইএলবেল টাইপের ব্যবহারকারীর অভিজ্ঞতা দেয়।
stitz

2
+1, দুর্দান্ত এবং সাধারণ। আমি ইতিমধ্যে 0 টি অপ্যাকটিয় 0 এ একটি সাধারণ বোতাম সেট করে চেষ্টা করেছি যা কাজ করে না, তবে প্রকারটি কাস্টমতে পরিবর্তন করার টিপটি পুরোপুরি কার্যকর হয়েছিল।
ব্রায়ান মোসকাউ

অস্বচ্ছতা বোতামটি এবং তার সমস্ত পূর্বরূপগুলিকে প্রভাবিত করবে, সুতরাং অস্বচ্ছতা = 0 পুরো জিনিসটিকে অদৃশ্য করে তুলবে।
একো

10
বাবা। এই থ্রেডের অন্যান্য সমাধানগুলির তুলনায় এটি একটি হ্যাক। আপনি যদি কোনও লেবেলে একটি টোকা অঙ্গভঙ্গি সনাক্ত করতে চান তবে একটি লেবেলে একটি টোকা অঙ্গভঙ্গি সনাক্তকারী ব্যবহার করুন। (দেখুন এটি কীভাবে এটি পড়ার মতো পড়েছিল?)
জেমস বাউচার

এটি একটি সুদূর, আরও ভাল সমাধান কারণ বোতামগুলি কেবল টেপগুলি (শুরু) না করে টাচআপিনসাইড হ্যান্ডেল করে।

17

সুইফট 3

আপনার একটি আইবিউটলেট আছে

@IBOutlet var label: UILabel!

যার মধ্যে আপনি ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম করুন এবং একটি অঙ্গভঙ্গি শনাক্তকারী যুক্ত করুন

label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)

এবং অবশেষে, ট্যাপটি হ্যান্ডেল করুন

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}

2
এটি কাজ করতে আমাকে ইউডিজিডিডট্যাপলবেলে @objc যুক্ত করতে হয়েছিল। একটি দ্রুত 4 জিনিস হতে পারে।
পজিক্স-অনুগত 18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.