Я пытаюсь написать вспомогательный класс, чтобы наше приложение могло поддерживать как UIAlertAction
, так и UIAlertView
. Однако при написании метода alertView:clickedButtonAtIndex:
для UIAlertViewDelegate
я столкнулся с этой проблемой: Я не вижу способа выполнить код в блоке обработчика UIAlertAction
.Как я могу выполнить обработчик UIAlertAction?
Я пытаюсь сделать это, держа массив UIAlertAction
с в собственности под названием handlers
@property (nonatomic, strong) NSArray *handlers;
, а затем реализовать делегат, как, например:
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
UIAlertAction *action = self.handlers[buttonIndex];
if (action.enabled)
action.handler(action);
}
Однако есть нет action.handler
, или, действительно, каким-либо образом я могу это увидеть, поскольку заголовок UIAlertAction
имеет только:
NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NSCopying>
+ (instancetype)actionWithTitle:(NSString *)title style:(UIAlertActionStyle)style handler:(void (^)(UIAlertAction *action))handler;
@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) UIAlertActionStyle style;
@property (nonatomic, getter=isEnabled) BOOL enabled;
@end
Есть ли другой способ выполнить код в блоке handler
UIAlertAction
?
Это, возможно, не ответ, который вы ищете (который я не уверен, что это возможно в любом случае), но вы пробовали переходящую в некоторых блоках для ваших действий, а не с помощью обработчиков ? Поэтому сохраните другой источник данных для действий, которые вы хотите запустить, на основе выбранного индекса. – timgcarlson
@timgcarlson, должен ли я также предоставить способ передать текст, стиль и включенность действий? –