आपके विचार (बटन के बहुत सारे की तरह) कई subviews आप निर्धारित कर सकते क्या उपयोग किया गया था मौजूद होता है तो? यदि ऐसा है, तो @ मैजिक बुलेट डेव के दृष्टिकोण के साथ कुछ संभवतः जाने का तरीका है।
एक विकल्प UIButton को उपclass करना है और प्रत्येक UIButton को एक लंबा टैपगेशर रिकॉग्निज़र में जोड़ना है। फिर आप अपना बटन जो चाहें उसे करने के लिए प्राप्त कर सकते हैं। उदाहरण के लिए, यह एक दृश्य नियंत्रक को स्वयं को पहचानने वाला एक संदेश भेज सकता है। निम्नलिखित स्निपेट उप-वर्ग के लिए विधियों को दिखाता है।
- (void) setupLongPressForTarget: (id) target;
{
[self setTarget: target]; // property used to hold target (add @property and @synthesise as appropriate)
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:button action:@selector(longPress:)];
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void) longPress: (UIGestureRecognizer*) recogniser;
{
if (![recogniser isEnabled]) return; // code to prevent multiple long press messages
[recogniser setEnabled:NO];
[recogniser performSelector:@selector(setEnabled:) withObject: [NSNumber numberWithBool:YES] afterDelay:0.2];
NSLog(@"long press detected on button");
if ([[self target] respondsToSelector:@selector(longPressOnButton:)])
{
[[self target] longPressOnButton: self];
}
}
आप इस तरह कोड कुछ हो सकता है आपके विचार नियंत्रक में:
- (void) viewDidLoad;
{
// set up buttons (if not already done in Interface Builder)
[buttonA setupLongPressForTarget: self];
[buttonB setupLongPressForTarget: self];
// finish any other set up
}
- (void) longPressOnButton: (id) sender;
{
if (sender = [self buttonA])
{
// handle button A long press
}
if (sender = [self buttonB])
{
// handle button B long press
}
// etc.
}
स्रोत
2011-09-09 13:41:06
अगर ([[आत्म लक्ष्य] respondsToSelector: @selector (longPressOnButton :)]) { [[आत्म लक्ष्य] longPressOn बटन: स्वयं]; } यह if-block संकलित नहीं करता है ... त्रुटि के रूप में: कोई ज्ञात उदाहरण विधि ... – trillions
मैंने इसे समझ लिया ... एक प्रोटोकॉल जोड़ा और यह तय किया गया। धन्यवाद.. – trillions