2010-09-22 52 views
0

我正在创建一个带有动作功能的栏按钮列表(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 
} 

回答

4

我没有看到动态创建的方法声明,因为这些方法中的代码将不动态任一的优点。

所以你应该声明一个方法,每个按钮都会调用一个方法,你可以通过它传递一个标签或引用发件人(按钮)或其他一些值,使你的方法可以告诉哪个按钮已被点击在调用方法之前。你可以做这样的事情:

-(void)buttonPressed: (int)tag { 

    if (tag == 0) { 
     // Code for first button 
    } 

    if (tag == 1) { 
     // Code for second button 
    } 

    // prepare code for further buttons... 

} 
+0

感谢您的评论。 – cruccruc 2010-10-02 11:27:22

0

你真的不应该这样做,这是不好的编码实践,我保证你在开发某些时候,你会后悔的。另一方面,你可以做的是处理有块的东西(比如你声明内联和堆栈的函数)。

你将宣布一个块直列类似的东西:

void (^doStuff)(int, char *) = ^(int arg0, char *arg1) { 
    printf("hello block"); 
}; 

doStuff(1, "a"); 
doStuff(2, "b"); 
... 

你可以做的是让你的按钮的子类,在点击执行给定块语句。

更多关于方块:developer.apple.com