سؤال

وأنا أتساءل عما اذا كان أي شخص قد استخدمت طريقة 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");
       }
   }     
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top