UILabel: استخدام أسلوب userInteractionEnabled على التسمية
-
03-07-2019 - |
سؤال
وأنا أتساءل عما اذا كان أي شخص قد استخدمت طريقة userInteractionEnabled على UILabel للسماح التسمية لتكون بمثابة زر (أو فقط لاطلاق طريقة). أي مساعدة سيكون موضع تقدير كبير. هتاف!
وتحديث (4/30/09 @ 1: 7:00) توضيح: لدي InfoButton القياسية وبجانبه أريد أن وضع التسمية مع "إعدادات" النص وأود التسمية لتعمل مثل زر ( . التي تقلب أكثر من شاشة الإعدادات لذلك، أساسا أنا بحاجة لربط showSettinsView محددة بالفعل إلى التسمية "infoLabel"؛ ينقر المستخدم على infoButton أو infoLabel وطريقة الحرائق قبالة
ووinfoButton تعمل بالفعل وباستخدام IBAction لتحريك الأسلوب. أود أن أعرف كيف سلك يصل التسمية لتنفيذ نفس الطريقة. هذا كل شيء. هتاف!
المحلول
وuserInteractionEnabled
ليست طريقة ولكن خاصية. ولكن أعتقد أنك سوف ترغب في تعيين هذا YES
للسماح للأحداث من خلال الحصول على superview UIView
.
وماذا قد ترغب في القيام به هو تجاوز أسلوب touchesBegan:withEvent:
من UIView
الذي يحتوي على UIButton
وUILabel
subviews.
وضمن هذا الأسلوب، اختبار إذا كان أي من اللمسات UITouch
تقع داخل حدود UILabel
.
وهذا هو، لا عنصر CGPoint
[touch locationInView]
تتقاطع مع مع CGRect
عنصر [infoLabel bounds]
؟ النظر في CGRectContainsPoint
وظيفة لتشغيل هذا الاختبار.
وإذا كان الأمر كذلك، ثم اطلاق النار قبالة NSNotification
الذي يستدعي نفس محدد IBAction
كما UIButton
.
نصائح أخرى
وحل آخر يمكن أن يكون لاستخدام UIButton
مع نوع الخاصة بها إلى العرف، بدلا من UILabel
. بهذه الطريقة الزر الثاني الخاص بك وسوف تبدو وكأنها UILabel
، ويمكنك تكوينه لتحريك طريقة showSettingsView
.
وأنا أتفق مع أليكس أبريل 30، '09 واقتراحي هو مجرد بالإضافة إلى ذلك، إذا كنت لا تريد أن تذهب مع UIButton. الطريق الأول حلها كان عن طريق إنشاء UILabel من خلال
- (id)initWithFrame:(CGRect)frame
{
label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
...
[label setUserInteractionEnabled: YES];
[self addSubview: label];
}
وبعد ذلك يمكنك تجاوز اللمسات * أساليب مثل touchesBegan، touchesEnded مع شيء من هذا القبيل
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
UITouch *touch = [touches anyObject];
if([touch view] == label) {
NSLog(@"I've been touched");
}
}