معالجة حدث اللمس في Uilabel وربطه حتى ibacte
-
02-10-2019 - |
سؤال
حسنًا ، لذلك لدي UILabel
تم إنشاؤه في Builder Interface يعرض بعض النص الافتراضي لـ "TAP TO BEGIN".
عندما ينقر المستخدم UILabel
أريدها أن تؤدي إلى طريقة ibacte:-(IBAction)next;
الذي يقوم بتحديث النص على الملصق ليقول شيئًا جديدًا.
سيكون من المريح حقًا أن يسمح لي هذا ببساطة بسحب اتصال من طريقتي إلى التسمية الخاصة بي ثم حدد لمس الداخل ، كما هو الحال مع زر. لكن للأسف ، لا سيجار.
على أي حال ، أعتقد أن سؤالي هو ، هل سأضطر إلى الفئة الفرعية UILabel
للحصول على هذا للعمل؟ أم أن هناك بطريقة ما يمكنني سحب زر فوق الملصق ، ولكن اجعله غير شفاف 0 ٪. أم أن هناك حل أبسط أفتقده؟
المحلول
تحقق من ذلك:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
الحيلة هي تمكين تفاعل المستخدم.
نصائح أخرى
يرث Uilabel من Uiview الذي يرث من uiresponder. يمكن لجميع كائنات uiresponder التعامل مع الأحداث التي تعمل باللمس. لذلك في ملف الفصل الخاص بك يعرف عن عرضك (الذي يحتوي على Uilabel) تنفيذ:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
في الواجهة ، قم بتعيين قيمة علامة Uilabel. عندما تحدث اللمسات في طريقة TouchesBegan الخاصة بك ، تحقق من قيمة العلامة للعرض الذي تنتمي إليه العلامة:
UITouch *touch = [touches anyObject];
if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";
تقوم بتوصيل التعليمات البرمجية الخاصة بك في ملف الفصل الخاص بك باستخدام كائن Uilabel في Builder عن طريق الإعلان عن متغير مثيل Uilabel الخاص بك مع بادئة Iboutlet:
IBOutlet UILabel *label;
ثم في Builder Interface ، يمكنك توصيلها.
يمكنك استخدام Uibultton ، وجعله شفافًا ، أي نوع مخصص بدون صورة ، وإضافة uilabel عليه (مركزه). ثم قم بتوصيل أحداث الزر العادية.
سريع 3
لديك iboutlet
@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
}