2009-04-30 12 views
9

पर उपयोगकर्ता इंटेक्शनएनेबल विधि का उपयोग करना मुझे आश्चर्य है कि किसी ने यूआईएलएबल पर उपयोगकर्ता इंटेक्शनएनेबल विधि का उपयोग किया है ताकि लेबल को बटन की तरह कार्य करने की अनुमति दी जा सके (या सिर्फ एक विधि को बंद करने के लिए)। किसी भी तरह की सहायता का स्वागत किया जाएगा। चीयर्स!उइलाबेल:

अपडेट (4/30/09 @ 1: 07 अपराह्न) स्पष्टीकरण: मेरे पास एक मानक इन्फोबटन है और इसके बगल में मैं टेक्स्ट "सेटिंग्स" के साथ एक लेबल रखना चाहता हूं और मैं लेबल को बटन की तरह काम करना चाहता हूं (जो एक सेटिंग स्क्रीन पर फिसल जाता है। इसलिए, मूल रूप से मुझे पहले से परिभाषित शोसेटिन व्यू को "infoLabel" लेबल में जोड़ना होगा; कोई उपयोगकर्ता जानकारी बटन पर क्लिक करता है बटन या जानकारी लेबल और विधि बंद हो जाती है।

जानकारी बटन पहले से ही काम कर रहा है और विधि को ट्रिगर करने के लिए एक आईबीएक्शन का उपयोग कर रहा हूं। मैं जानना चाहता हूं कि एक ही विधि को लागू करने के लिए लेबल को कैसे तार करना है। यह सब है। चीयर्स!

+0

आप और अधिक उपयोगी प्रतिक्रियाएं मिल जाएगा, तो आप स्पष्ट touchesBegan तरह के तरीकों, कुछ के साथ touchesEnded * अपने प्रश्न: आपको विशेष रूप से सहायता की क्या ज़रूरत है? आपने क्या प्रयास किया है जो काम नहीं करता है, और/या आप वास्तव में क्या करना चाहते हैं कि आप नहीं जानते कि कैसे पूरा किया जाए? – smorgan

+0

@smorgan: धन्यवाद, मैंने सवाल अपडेट किया। मुझे उम्मीद है कि यह मदद करता है। –

उत्तर

13

userInteractionEnabled एक विधि नहीं बल्कि एक संपत्ति है। लेकिन मैं नहीं hink आप इसे YES पर सेट करना चाहते हैं ताकि ईवेंट UIView पर्यवेक्षण के माध्यम से हो सकें।

आप क्या करना चाहते हो सकता है क्या ओवरराइड UIView कि आपके UIButton और UILabel subviews शामिल की touchesBegan:withEvent: तरीका है।

इस विधि के भीतर, UITouch में से किसी भी UILabel की सीमाओं के भीतर छूने का परीक्षण करें।

है, CGPoint तत्व [touch locationInView]CGRect तत्व [infoLabel bounds] साथ साथ एक दूसरे को काटना पड़ता है? इस परीक्षण को चलाने के लिए फंक्शन CGRectContainsPoint पर देखें।

यदि ऐसा है, तो NSNotification को आग लगाना जो चयनकर्ता को UIButton के रूप में कॉल करता है।

+0

धन्यवाद एलेक्स, मैं आगे बढ़ूंगा और कोशिश करूँगा और देख सकता हूं कि मैं क्या कर सकता हूं। चीयर्स! –

7

एक और समाधान UIButton का उपयोग UILabel के बजाय, अपने प्रकार के सेट पर कस्टम के साथ किया जा सकता है। इस प्रकार आपका दूसरा बटन UILabel जैसा दिखेगा, और आप showSettingsView विधि को ट्रिगर करने के लिए इसे कॉन्फ़िगर कर सकते हैं।

+0

यह वास्तव में अच्छी चाल है। – fyasar

1

मैं 30 अप्रैल, 0 9 को एलेक्स से सहमत हूं और मेरा प्रस्ताव सिर्फ इसके अलावा एक अतिरिक्त है, अगर आप UIButton के साथ नहीं जाना चाहते हैं। जिस तरह से मैं हल यह

- (id)initWithFrame:(CGRect)frame 
{ 
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)]; 
    ... 
    [label setUserInteractionEnabled: YES]; 
    [self addSubview: label]; 
} 

के माध्यम से एक UILabel बनाकर था तो आप ओवरराइड कर सकते हैं छूता तरह

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event { 
     UITouch *touch = [touches anyObject]; 
     if([touch view] == label) { 
      NSLog(@"I've been touched"); 
     } 
    }  
+0

यह बेहतर है। – benck

+0

मुझे आश्चर्य है कि मेरे पास आपके जैसे समान कोड क्यों हैं, लेकिन मेरा फायरिंग स्पर्श नहीं है –