2012-08-11 47 views
0

我设置了一个UINavigationBar并且遇到按钮问题。当我这样做:错误使用选择器作为参数

-(void)addLeftButton:(NSString *)titl 
{ 
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:@selector(haikuInstructions)]; 
self.titleOfNavItem.leftBarButtonItem = button; 
} 

然后一切都很好。但是,如果我这样做:

-(void)addLeftButton:(NSString *)titl callingMethod:(NSString *)method 
{ 
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:@selector(method)]; 
self.titleOfNavItem.leftBarButtonItem = button; 
} 

并调用该方法的另一种方法是这样的:

[self addLeftButton:@"Instructions" callingMethod:@"haikuInstructions"]; 

我得到一个unrecognized selector错误。有关我做错什么的想法?

回答

3

你应该使用NSSelectorFromString(NSString *aSelectorName)

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:NSSelectorFromString(method)]; 

编辑: 要精心,@selector指令将括号之间治疗名字的字面。更重要的是,它不会检查该方法是否真的存在。这意味着如果您使用@selector(method)并且也有变量NSString *method = @"haikuInstructions",则不会指向名为"haikuInstructions"的选择器,而是指向名为"method"的选择器。

+0

而且工作!谢谢。 – 2012-08-11 22:15:22

+0

@JoelDerfner请阅读我编辑的解释,看看有什么不对。 – Johnnywho 2012-08-11 22:39:06

相关问题