我正在开发一个应用程序,我正在动态地将UIBarButtonItem
添加到UIToolbar
。当用户点击栏按钮时。我将它的色调改为红色。
但对于某些条形按钮,它不起作用,应用程序崩溃。
这是我的代码:
@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
这里我的问题是只有一个参数的条形按钮,它的选择器工作正常(createPlantDetails
)但是当我点击它的选择器(createInventory
)中有两个参数的条形按钮时应用程序正在[button setTintColor:[UIColor redColor]];
changeSelection
方法崩溃。
崩溃日志类似于:touches event have no method like setTintColor .
我搜索了很多但找不到解决方案。请帮帮我。
提前致谢
答案 0 :(得分:2)
action
属性的方法必须具有以下三种形式之一:
- (void)methodName;
- (void)methodName:(id)sender;
- (void)methodName:(id)sender withEvent:(UIEvent *)event;
您不能使用任何格式或自定义参数(按钮不知道要传递给他们的内容)。
createPlantDetails:
方法有效,因为它与第二种形式匹配。
createInventory:button:
方法失败,因为它与任何预期的签名都不匹配
由于您的方法有两个参数,当按钮调用方法时,该按钮会传递第二个参数中的UIEvent
对象,该方法的名为 button
。
在changeSelection:
中,它在尝试呼叫setTintColor:
时崩溃,因为button
实际上是UIEvent
而不是UIBarButtonItem
(即发件人)