我有一个函数可以创建一个带有一堆UIButtons的UIView。
每个按钮调用一个带参数字符串的函数。
所以,在我的函数中,我做了类似的事情:
[button addTarget: [multiRadio objectAtIndex:0]
action: NSSelectorFromString([multiRadio objectAtIndex:1])
forControlEvents:UIControlEventTouchUpInside];
但是,这段代码没有指定动作需要传递的字符串参数。
如果我在[multiRadio objectAtIndex:2]中有该字符串参数,如何设置按钮的操作以使用该字符串?
答案 0 :(得分:1)
为什么不直接从您调用的方法访问它?而不是:
- ( void )someMethod:( id )sender withString:( NSString * )string {
[ self doSomethingWithString:string ];
}
使用它:
- ( void )someMethod:( id )sender {
SomeClass *multiRadio = [[ SomeClass alloc ] init ];
[ self doSomethingWithString:[ multiRadio objectAtIndex:2 ]];
...
[ multiRadio release ];
}
显然,根据需要更改方法签名,但这是绕过它的一种方法。
答案 1 :(得分:0)
我创建了一个对象类来充当这些事件的接收者。像这样:
ActionWrangler *wrangler = [[ActionWrangler alloc] init];
wrangler.target = [multiRadio objectAtIndex:0];
wrangler.selector = NSSelectorFromString([multiRadio objectAtIndex:1]);
wrangler.argument = [multiRadio objectAtIndex:2];
[button addTarget:wrangler
action:@selector(wrangle)
forControlEvents:UIControlEventTouchUpInside];
然后ActionWranger会有一个像这样的争吵方法:
- (void)wrangle
{
[target performSelector:selector withObject:argument];
}
然后,您最大的问题是跟踪ActionWrangler实例,以便您可以释放它们。