如何动态地将方法分配给按钮

时间:2014-11-29 23:34:44

标签: ios objective-c xcode

在我的IOS应用程序中,我有一个按钮,用户可以为其分配自定义操作,但我不知道动态设置操作按钮的最佳方法是什么。我的第一个想法是更改按钮的[发送者标签],然后按下它后会读取一系列“if”语句,说“if(sender tag = 1){then then this} if(sender tag = 2){然后这样做},依此类推。“但问题是我将有数千种可能的操作,所以如果有人选择发件人标签为2000的操作,那么该方法必须在读取“if(sender tag = 2000)之前读取每个问题。 “,这是浪费时间。如何动态设置按钮动作?

1 个答案:

答案 0 :(得分:1)

你有很多选择。按钮支持目标/操作,因此您可以使用 removeTarget:action:forControlEvents:addTarget:action:forControlEvents:更改按钮的操作。

或者你可以像你说的那样使用标签。标签是数字的,因此您可以使用switch语句而不是if / then / else链。但更好的方法是使用NSArray块并为用户选择的操作调用适当的块。

示例:

在标题中:

typedef void (^myButtonBlock)(id sender);

在您的实施中:

myButtonBlock aBlock = ^(UIButton *sender) 
{   
  NSLog(@"Button block triggered for button with tag %d", sender.tag); 
}

NSMutableArray *blocksArray = [NSMutableArray new];
[blocksArray addObject: aMethod];