Как Apple делает это, не заставляя нас вручную указывать для каждого обработчика действий, что он должен закрыть контроллер представления?
Вы путаете две разные вещи:
Последний параметр инициализации UIAlertAction, параметр handler
, который вы можете установить снаружи и который должен запускаться после нажатия кнопки и после отмены предупреждения. Это блок .
Фактическое действие кнопки *1016*, которое клиент не может установить или увидеть. Это настраивается контроллером оповещений. Это селектор .
Итак, вы играете роль UIAlertController. В вашем
- (instancetype)initWithTitle:(nullable NSString *)title handler:(void (^)(MyAlertAction *action))handler;
клиент передает вам первое упомянутое действие , блок, и вы сохраняете его для последующего выполнения. Но действие second , действие кнопки, селектор, полностью зависит от вас, когда вы создаете кнопку в ответ на этот вызов.
Поэтому, когда вы настраиваете кнопку, просто настройте ее с парой цель / действие, которая вызывает метод вашего контроллера представления, как и для любой кнопки. В методе, когда вызывается, контроллер представления отменяет себя, а в обработчике завершения отмены вызывает блок.