Ios 如何为按钮动态分配方法

Ios 如何为按钮动态分配方法,ios,objective-c,xcode,Ios,Objective C,Xcode,在我的IOS应用程序中,我有一个按钮,用户可以为其指定自定义操作,但我不知道动态设置按钮操作的最佳方法。我的第一个想法是改变按钮的[sender tag],然后在按下按钮后,它会读到一系列的“if”语句,上面写着“if(sender tag=1){然后做这个}if(sender tag=2){然后做这个},等等。”但问题是,我会有数千个可能的动作,所以如果有人选择了一个动作,其sender tag是2000,然后,该方法必须在读取“if(sender tag=2000)”之前通读每个问题,这是浪

在我的IOS应用程序中,我有一个按钮,用户可以为其指定自定义操作,但我不知道动态设置按钮操作的最佳方法。我的第一个想法是改变按钮的[sender tag],然后在按下按钮后,它会读到一系列的“if”语句,上面写着“if(sender tag=1){然后做这个}if(sender tag=2){然后做这个},等等。”但问题是,我会有数千个可能的动作,所以如果有人选择了一个动作,其sender tag是2000,然后,该方法必须在读取“if(sender tag=2000)”之前通读每个问题,这是浪费时间。如何动态设置按钮的操作?

您有很多选择。按钮支持目标/操作,因此您可以使用

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];

您正在尝试创建的实际应用程序是什么。如果你有那么多可能的东西,那么听起来像是一个表视图可能更好等等。。。解释视图试图执行的操作。有更好的方法可以做到这一点。你可以使用
class\u addMethod
在运行时根据用户正在做的事情向类中添加一个方法(),然后当按下按钮时,使用
performSelector:
调用动态添加的方法()我在描述中使用了一个按钮作为示例,但与自定义操作的方式类似,导致该操作的事件也可以自定义。这种可定制的情况将由用户设置,因此我无法猜测屏幕上会显示什么。这就是为什么我想弄清楚我是否可以将方法链接到事件,但也可以在运行时取消链接并将新方法链接到事件,如果不能,那么还有解决方法吗?谢谢Morgan Chen!这就是我需要的。我建议使用目标/行动。按钮已经内置了这种支持。使用块涉及到编写一组新的程序逻辑。我准备编写所有必要的逻辑,我只是以一个按钮为例,事件的原因可能是运行期间的任何事情。存储块听起来也适合其他一些我不确定的情况。我必须在其中存储块的具体类型是什么?作为一个糟糕的例子,我认为它应该是这样的:NSBlock*myBlock={do some line of code..};我知道“NSBlock”不是一个真正的术语,我只是想知道您是否可以给我介绍一些解释如何设置和存储块的内容。如果没有,我可以在某处找到,谢谢你的帮助!块是一个对象。可以像任何其他对象一样在NSArray中存储块。任何声明块变量的代码都将向您显示语法。例如,看一下NSComparator的定义:
typedef nscomparationresult(^NSComparator)(id obj1,id obj2)
NSComparator
。您可以定义NSComparator类型的变量。然后可以将它们添加到数组中。