Обработчик завершения, вызываемый в методе IBAction

Я отлаживаю старый проект, в котором есть старая библиотека. Я не уверен, как они вызвали обработчик блока из метода действия кнопки. У них есть класс, в котором они объявили метод

+ (void) method: (NSString *) parameter;

В котором, я думаю, они добавляют кнопку отмены и метод действия для кнопки. Они объявили блок как

typedef void (^simpleBlock)(void);

@property (nonatomic, copy) simpleBlock simpleBlock;

И когда он реализован в классе ViewController, он называется

[ClassName method:@"parameter"].simpleBlock = ^{
        //Do something
    };

Как бы они связали блок с действием кнопки и методом, потому что я не мог видеть, так как это библиотека, получил только заголовочный файл. Будем признательны за любую помощь в понимании этой реализации. Спасибо!


person nOOb iOS    schedule 13.12.2016    source источник


Ответы (1)


Для вызова блока любого действия мы кодируем так:

In a TotalLikes_Comments.h ,

@property (nonatomic, copy) void (^LikeButtonTapAction)(TotalLikes_Comments *aCell);

- (IBAction)openLikesClick:(id)sender;

В TotalLikes_Comments.m Фактическая реализация метода

- (IBAction)openLikesClick:(id)sender {
    if (self.openLikesTapAction) {
        self.openLikesTapAction(self);
    }
}

Где всякий раз, когда кнопка нажимает, этот блок инициализируется объектом класса,

Всякий раз, когда нам нужно действие, нет необходимости писать код действия в файле класса, просто напишите свой код там, где вы инициализировали класс, например, в ячейке forrow atIndexpath

cell.LikeButtonTapAction = ^(TotalLikes_Comments *aCell){
  // Do your stuff.
};

Выше приведена логика вызова блока в IBAction. Но в вашем сценарии это написано в Frameworks. В котором Логика действия скрыта ото всех. например.

if(self.openLikesTapAction) {
     self.openLikesTapAction(self);
  }

Надеюсь, вы получили идею из этого.

person Sagar Shirbhate    schedule 13.12.2016