我正在创建一个条形按钮列表及其动作功能(sFuncName
如下),它会动态更改。
当用户点击某个按钮时,系统会调用sFuncName
。
for(int i = 0; i < 3 ; i++){
NSString* sFuncName = [NSString stringWithFormat:@"OnFunc_%d:", i ];
barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem target:self
action:NSSelectorFromString(sFuncName)];
}
问题是:我有没有办法动态声明sFuncName
以响应按钮?
示例:
for(int i = 0; i < 3 ; i++){
NSString* sFuncName = [NSString stringWithFormat:@"OnFunc_%d:", i ];
- (void)sFuncName: (id)sender; //sFuncName: OnFunc_0, OnFunc_1, OnFunc_2
}
答案 0 :(得分:4)
我没有看到动态创建方法声明的优势,因为这些方法中的代码也不是动态的。
因此,您应该声明一个方法,该方法将被每个按钮调用,您将标记或引用传递给发送者(按钮)或其他一些值,使您的方法可以告诉您之前已点击了哪个按钮被调用的方法。你可以这样做:
-(void)buttonPressed: (int)tag {
if (tag == 0) {
// Code for first button
}
if (tag == 1) {
// Code for second button
}
// prepare code for further buttons...
}
答案 1 :(得分:0)
你真的不应该这样做,这是糟糕的编码实践,我保证你在开发的某个阶段你会后悔的。另一方面,你可以做的是用块处理东西(比如你在内联和堆栈中声明的函数)。
你会声明一个类似的内联块:
void (^doStuff)(int, char *) = ^(int arg0, char *arg1) {
printf("hello block");
};
doStuff(1, "a");
doStuff(2, "b");
...
您可以做的是创建按钮的子类,以便在单击时执行给定的块语句。
有关区块的更多信息:developer.apple.com