您是否尝试过使用 ReactiveCocoa 框架并为您的代码添加一些块,这不是最简单的方法,但我会说当您有多个依赖项并且非常适合扩展时它是最有效的
我使用我建议的方法创建了一个小项目来解决您的问题(我尝试将其调整为良好的旧 MVC 模式,而不是我喜欢的 MVVM)
你可以在这里找到它
https://github.com/MWaly/MWButtonExamples
确保安装 cocoa pods 文件,因为我们需要此示例的“ReactiveCocoa”和“BlocksKit”
我们将使用两个主要类
ViewController => 显示按钮的 viewController 对象 MWCustomButton => 处理事件的自定义 UIButton
创建按钮时,还会使用该属性创建对 viewController 的弱引用
@property (weak) ViewController *ownerViewController ;
事件将在 blocksKit bk_addEventHandler 方法的帮助下处理,并将其传递给 ViewController (selectedButtonCallBackBlock) 的块
[button bk_addEventHandler:^(id sender)
{
self.selectedButtonCallBackBlock(button);
} forControlEvents:UIControlEventTouchUpInside];
现在在 ViewController 中为每个触摸的按钮调用 callBackButtonBlock 将被触发,如果适用,它将更改其当前选择的按钮
__weak __typeof__(self) weakSelf = self;
self.selectedButtonCallBackBlock=^(MWCustomButton* button){
__typeof__(self) strongSelf = weakSelf;
strongSelf.currentSelectedButton=button;
};
在 MWCustomButton 类中,它将侦听其 ownerViewController 的“currentSelectedButton”属性的任何更改,并使用我们良好的 Reactive Cocoa 根据它更改其选择属性
///Observing changes to the selected button
[[RACObserve(self, ownerViewController.currentSelectedButton) distinctUntilChanged] subscribeNext:^(MWCustomButton *x) {
self.selected=(self==x);
}];
我认为这会解决您的问题,同样您的问题可能会以更简单的方式解决,但是我相信使用这种方法会更具可扩展性和更清洁。