IOS - call selection button on the button with the parameter

Hi, this is hopefully a simple question to solve.

What I'm trying to do is have a button action selector that calls my other method with the name of the movie file to play. If you move the file name back to the method, it works flawlessly.

What I believe, I stumble, is the right way to add a selector to Button. Any input / recommendations or recommendations will be appreciated.

Thanks in advance.

//The Button infobuttonTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; infobuttonTwo.frame = CGRectMake(405, 204, 49, 58); [infobuttonTwo addTarget:self action:@selector(buttonInfo:) withObject:@"VTS_02_1" forControlEvents:UIControlEventTouchUpInside]; //The Method It calling -(void)buttonInfo:(NSString *) fileName { //The Error it showing. -[UIRoundedRectButton addTarget:action:withObject:forControlEvents:]: unrecognized selector sent to instance 0x660e9e0 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIRoundedRectButton addTarget:action:withObject:forControlEvents:]: unrecognized selector sent to instance 0x660e9e0' *** Call stack at first throw: ( 0 CoreFoundation 0x011bfbe9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x013145c2 objc_exception_throw + 47 2 CoreFoundation 0x011c16fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3 CoreFoundation 0x01131366 ___forwarding___ + 966 4 CoreFoundation 0x01130f22 _CF_forwarding_prep_0 + 50 5 bCIT 0x000054f3 -[TrailersViewController popButtons] + 647 6 bCIT 0x0000444b -[TrailersViewController right] + 437 7 bCIT 0x00003b2d -[TrailersViewController handleSwipeFrom:] + 191 8 UIKit 0x005559c7 -[UIGestureRecognizer _updateGestureWithEvent:] + 727 9 UIKit 0x005519d6 -[UIGestureRecognizer _delayedUpdateGesture] + 47 10 UIKit 0x00557fa5 _UIGestureRecognizerUpdateObserver + 584 11 UIKit 0x0055818a _UIGestureRecognizerUpdateGesturesFromSendEvent + 51 12 UIKit 0x002f36b4 -[UIWindow _sendGesturesForEvent:] + 1292 13 UIKit 0x002eef87 -[UIWindow sendEvent:] + 105 14 UIKit 0x002d237a -[UIApplication sendEvent:] + 447 15 UIKit 0x002d7732 _UIApplicationHandleEvent + 7576 16 GraphicsServices 0x01af5a36 PurpleEventCallback + 1550 17 CoreFoundation 0x011a1064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 18 CoreFoundation 0x011016f7 __CFRunLoopDoSource1 + 215 19 CoreFoundation 0x010fe983 __CFRunLoopRun + 979 20 CoreFoundation 0x010fe240 CFRunLoopRunSpecific + 208 21 CoreFoundation 0x010fe161 CFRunLoopRunInMode + 97 22 GraphicsServices 0x01af4268 GSEventRunModal + 217 23 GraphicsServices 0x01af432d GSEventRun + 115 24 UIKit 0x002db42e UIApplicationMain + 1160 25 bCIT 0x000029b4 main + 102 26 bCIT 0x00002945 start + 53 ) terminate called after throwing an instance of 'NSException 
+8
xcode ios4 uibutton ipad selector
source share
6 answers

Well, your problem is that addTarget:action:withObject:forControlEvents: not a method that exists in UIControl . You need to find another way to track the value of your object, either in ivar, or in some kind of intermediate data source, or something else.

There was some similar question some time ago that has some suggestions.

+4
source share

UIControl actions (UIButton - one) can have three different method signatures:

 - (void)action - (void)action:(id)sender - (void)action:(id)sender event:(UIEvent *)event 

so you're trying to make it impossible. You cannot send a custom object using UIControlEvent.

Perhaps something like this is the solution to your problem.

 -(void)buttonInfo:(id)sender { NSString *fileName = nil; if (sender == infobuttonTwo) { fileName = @"VTS_02_1"; } } 

and of course you have to change your wrong addTarget method

 [infobuttonTwo addTarget:self action:@selector(buttonInfo:) forControlEvents:UIControlEventTouchUpInside]; 
+17
source share

Check this.

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. int y = 100; for (int i = 0; i <= 5; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown]; [button setTitle:@"Show View" forState:UIControlStateNormal]; button.frame = CGRectMake(80, y, 160, 40); [button setTitle:[NSString stringWithFormat:@"Button-%i", i] forState:UIControlStateNormal]; [self.view addSubview:button]; y = y + 60; } } - (void)aMethod:(id)sender { UIButton *button = sender; int y = 100; int i = 5; for (int x = 0; x <= i; x++) { NSString *frameString = [NSString stringWithFormat:@"{{80, %i}, {160, 40}}", y]; if ([NSStringFromCGRect(button.frame) isEqualToString:frameString]) { NSLog(@"button %i clicked..", x); } y = y + 60; } } 
+5
source share

You can do it:

 buttonInfo.tag = 1; 

and in

 -(void)buttonInfo:(id)sender { if(sender.tag == 1){ NSString filename = @"VTS_02_1"; } } 

...

+4
source share
 [infobuttonTwo addTarget:self action:@selector(buttonInfo:)forControlEvents:UIControlEventTouchUpInside]; 
0
source share

My solution for this is to create a global variable that will hold the object.

-2
source share

All Articles