i've got problem understanding, how ios view controllers , alert controllers work in specific case:
i have custom uinavigationcontroller in there uiviewcontroller. navigation controller has overridden dismissviewcontrolleranimated:completion method. uiviewcontroller present new uialertcontroller. point user clicks button in alert, works fine. however, strange part is, custom uinavigationcontroller's dismissviewcontrolleranimated:completion method being called (i don't want that, if possible...)
the alert presented in regular manner (from uiviewcontroller within uinavigationcontroller):
uialertcontroller *alert = [uialertcontroller alertcontrollerwithtitle:title message:message preferredstyle:uialertcontrollerstylealert]; uialertaction *okaction = [uialertaction actionwithtitle:@"yep" style:uialertactionstyledefault handler:^(uialertaction * _nonnull action) { [self takeorder:data]; }]; uialertaction *cancelaction = [uialertaction actionwithtitle:@"nope" style:uialertactionstylecancel handler:^(uialertaction * _nonnull action) { }]; [confirmorderacceptalert addaction:okaction]; [confirmorderacceptalert addaction:cancelaction]; [self presentviewcontroller:alert animated:yes completion:nil]; is there option prevent behavior? why happen in first place?
edit: code dismissviewcontrolleranimated:completion:
- (void)dismissviewcontrolleranimated:(bool)flag completion:(void (^)(void))completion { self.isheroenabled = no; [super dismissviewcontrolleranimated:flag completion:completion]; } i'm using hero library animate transitions, case?
as subclassing uinavigationcontroller, call dismissviewcontrolleranimated:completion.
to avoid disturbing library code, check specific viewcontroller types.
eg:
- (void)dismissviewcontrolleranimated:(bool)flag completion:(void (^)(void))completion { if(![self.visibleviewcontroller iskindofclass:[uialertcontroller class]]){ self.isheroenabled = no; } [super dismissviewcontrolleranimated:flag completion:completion]; }
Comments
Post a Comment