iPhone为不同类中的按钮添加事件

iPhone为不同类中的按钮添加事件,iphone,objective-c,Iphone,Objective C,我有一个视图控制器,我们称之为“视图控制器a”。 我有一个不同的类(派生自NSObject和in.h和.m对),让我们称这个类为“B”。 从“B”的功能中,我使用addSubView在“a”中添加了一个按钮。 按钮正在添加,但现在我想将一个事件附加到此新按钮。 我正在使用 [newButton addTarget:self etc. etc.] 但它不起作用 我不想在视图控制器“A”中声明事件。 有没有办法摆脱这个 谢谢大家阅读这篇文章 [newButton addTarget:viewCon

我有一个视图控制器,我们称之为“视图控制器a”。 我有一个不同的类(派生自NSObject和in.h和.m对),让我们称这个类为“B”。 从“B”的功能中,我使用addSubView在“a”中添加了一个按钮。 按钮正在添加,但现在我想将一个事件附加到此新按钮。 我正在使用

[newButton addTarget:self etc. etc.]
但它不起作用

我不想在视图控制器“A”中声明事件。 有没有办法摆脱这个

谢谢大家阅读这篇文章

[newButton addTarget:viewControllerA etc. etc.]
编辑:更完整的版本:

[newButton addTarget:viewControllerA action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
这假设类B有一个对视图控制器a的引用,名为
viewControllerA
。它还假设视图控制器A实现了以下方法:

- (void)buttonAction:(id)sender;
编辑2:这就是您想要的:

[newButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
我假设你已经有了它,我假设它不起作用的原因是因为你有一个类似这样的方法:

+ (void)addButtonToController:(UIViewController *)controller;
这是一个类方法。类方法中没有
self
。一种可能的解决方案是将其设置为singleton类,并简单地将方法更改为:

- (void)addButtonToController:(UIViewController *)controller;
您可以使用以下方法调用该方法:

[[ClassB sharedInstance] addButtonToController:controller];
如果您不知道如何创建singleton类,我可以第三次更新我的答案以包含该选项。:)

编辑3:我仍然认为我原来的答案是正确的。您不必实现
-(void)按钮操作:(id)发送者在每个控制器中。您可以使用继承或类别来访问每个控制器中的此方法,而不必为每个控制器实现它。如果你需要帮助,请告诉我

编辑:更完整的版本:

[newButton addTarget:viewControllerA action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
这假设类B有一个对视图控制器a的引用,名为
viewControllerA
。它还假设视图控制器A实现了以下方法:

- (void)buttonAction:(id)sender;
编辑2:这就是您想要的:

[newButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
我假设你已经有了它,我假设它不起作用的原因是因为你有一个类似这样的方法:

+ (void)addButtonToController:(UIViewController *)controller;
这是一个类方法。类方法中没有
self
。一种可能的解决方案是将其设置为singleton类,并简单地将方法更改为:

- (void)addButtonToController:(UIViewController *)controller;
您可以使用以下方法调用该方法:

[[ClassB sharedInstance] addButtonToController:controller];
如果您不知道如何创建singleton类,我可以第三次更新我的答案以包含该选项。:)


编辑3:我仍然认为我原来的答案是正确的。您不必实现
-(void)按钮操作:(id)发送者在每个控制器中。您可以使用继承或类别来访问每个控制器中的此方法,而不必为每个控制器实现它。如果您需要这方面的帮助,请告诉我。

但是这样做时,viewControllerA需要有该方法(选择器方法),我不想在viewControllerA中添加该方法:(@Guru To not invirect MVC
viewControllerA
需要这个方法。如果你不喜欢MVC,我认为你应该这样做,你可以让B类(或任何其他类)来处理事件,但这将是一个糟糕的设计,我不推荐它。假设我有26个从“A”到“Z”的viewController,我在“B”类中有静态方法它将该按钮添加到调用类中,如“A”、“B”等。这意味着我有一个类“B”,它将相同的按钮添加到所有类中,该按钮在所有viewcontroller上执行相同的操作,因此我不想编写-(void)按钮操作:(id)sender;对于所有这26个类,因此我想要一个解决方案,我可以在类“B”中定义buttonAction,并且我可以在任何地方使用该按钮,而无需编写任何其他代码。这就是我想要的。:@Guru我知道你为什么要这样做,所以我更新了我的答案,包括如何做到这一点。但是我仍然不确信我喜欢这个设计。但是这样做,viewControllerA需要有那个方法(选择器方法),我不想在viewControllerA中添加这个方法(@Guru To not invirect MVC
viewControllerA
需要这个方法。如果你不喜欢MVC,我认为你应该这样做,你可以让B类(或任何其他类)来处理事件,但这将是一个糟糕的设计,我不推荐它。假设我有26个从“A”到“Z”的viewController,我在“B”类中有静态方法它将该按钮添加到调用类中,如“A”、“B”等。这意味着我有一个类“B”,它将相同的按钮添加到所有类中,该按钮在所有viewcontroller上执行相同的操作,因此我不想编写-(void)按钮操作:(id)sender;对于所有这26个类,因此我想要一个解决方案,我可以在类“B”中定义buttonAction,并且我可以在任何地方使用该按钮,而无需编写任何其他代码。这就是我想要的。:@Guru我知道你为什么要这样做,所以我更新了我的答案,包括如何做到这一点。但是我仍然不相信我喜欢这个设计。