I’m working on an application in which I’m adding UIBarButtonItem to UIToolbar dynamically. When User clicks on a bar button. I’m changing it’s tint color to red.
But for some bar buttons it’s not working and the application is crashing.
Here is my code:
@interface myClass : UIViewController
@property (nonatomic, retain) NSMutableArray *barButtonItems;
@property (nonatomic, retain) IBOutlet UIToolbar *toolBar;
@end
@implementation myClass
@sythesize barButtonItems, toolBar;
- (void)viewDidLoad
{
[super viewDidLoad];
barButtonItems = [[NSMutableArray alloc] init];
[self initToolBar];
}
//To set the tool bar
- (void)initToolBar
{
[self addBarItem:@"PlantDetails" actionName:@"createPlantDetails:"];
[self addBarItem:@"ElectricalEquipmentInventory" actionName:@"createInventory:button:"];
toolBar.items = barButtonItems;
}
//Create bar button item
- (void)addBarItem:(NSString*)barButtonName actionName:(NSString*)methodName
{
UIBarButtonItem *plantDetails = [[UIBarButtonItem alloc] initWithTitle:barButtonName style:UIBarButtonItemStyleDone target:self action:NSSelectorFromString(methodName)];
[barButtonItems addObject:plantDetails];
[plantDetails release];
plantDetails = nil;
}
//Changes the barbutton tintcolor when user selected
-(void)changeSelection:(UIBarButtonItem *)button
{
NSArray *tempArray = toolBar.items;
for(int loop = 0; loop<[tempArray count]; loop++)
[[tempArray objectAtIndex:loop] setTintColor:[UIColor blackColor]];
[button setTintColor:[UIColor redColor]];
}
//First bar button method
- (void)createPlantDetails:(UIBarButtonItem *)button
{
[self changeSelection:button];
NSLog(@"createPlantDetails");
}
//second bar button method
- (void)createInventory:(int)selectedIndex button:(UIBarButtonItem *)button
{
[self changeSelection:button];
NSLog(@"createInventory");
}
@end
Here my issue is the bar button with only one parameter in it’s selector is working perfectly (createPlantDetails) but when I click on the bar button which have two parameter in it’s selector (createInventory) the application is crashing on [button setTintColor:[UIColor redColor]]; of changeSelection method.
Crash log is something like: touches event have no method like setTintColor .
I searched a lot but couldn’t find a solution. Please help me.
Thanks in advance
The method for the
actionproperty has to have one of the following three forms:You can’t use any arbitrary format or custom parameters (the button wouldn’t know what to pass for them).
The
createPlantDetails:method works because it matches the second form.The
createInventory:button:method fails because it doesn’t match any of the expected signatures.Since your method has two parameters, when the button calls the method, the button passes a
UIEventobject in the second parameter which in your method is namedbutton.In
changeSelection:, it crashes when it tries to callsetTintColor:becausebuttonis really aUIEventand not theUIBarButtonItem(ie. the sender).