From a68fcc760fee9c0cd46dad04a831095dab07b776 Mon Sep 17 00:00:00 2001 From: alonsolu Date: Tue, 29 Aug 2017 12:52:08 +0800 Subject: [PATCH] GDDViewControllerTransition support completion block --- .../GDDViewControllerTransition.h | 1 + .../GDDViewControllerTransition.m | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.h b/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.h index 869d38b..3b5df86 100644 --- a/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.h +++ b/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.h @@ -32,6 +32,7 @@ NS_ASSUME_NONNULL_BEGIN - (GDDViewControllerTransition *(^)(id data))data; - (GDDViewControllerTransition *(^)(GDDPBViewOption *viewOption))viewOption; +- (GDDViewControllerTransition *(^)(void (^completion)()))completion; /** * 总是创建新的 ViewController 实例, 并显示 diff --git a/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m b/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m index 0692723..8cb52a8 100644 --- a/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m +++ b/GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m @@ -16,6 +16,7 @@ @implementation GDDViewControllerTransition { enum GDDViewControllerTransitionStackMode _stackMode; BOOL _alreadyInStack; // 是否已经显示过了 Class _viewControllerClass; + void (^_completion)(void); } - (GDDViewControllerTransition *(^)(id data))data { @@ -32,6 +33,13 @@ @implementation GDDViewControllerTransition { }; } +- (GDDViewControllerTransition *(^)(void (^completion)()))completion { + return ^GDDViewControllerTransition *(void (^completion)()) { + _completion = completion; + return self; + }; +} + - (id (^)(Class viewControllerClass))toClass { return ^id (Class viewControllerClass) { if (_viewOption.launchMode) { @@ -124,7 +132,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found { } UIViewController *rootViewController = UIApplication.sharedApplication.keyWindow.rootViewController; if (rootViewController.presentedViewController) { // 避免内存泄漏, 以释放 rootViewController 和 rootViewController.presentedViewController - [rootViewController dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:nil]; + [rootViewController dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:_completion]; } UIWindow *window = UIApplication.sharedApplication.delegate.window; if (!window) { @@ -149,7 +157,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found { // bring viewController to front UIViewController *controller = self.viewController; if (controller.presentedViewController) { - [controller dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:nil]; + [controller dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:_completion]; } UIViewController *current = controller; while (current.parentViewController) { @@ -200,7 +208,7 @@ - (void)displayAndRefresh { } [self config:YES]; // 某些 ViewOption 需要在 present 之前设置才会生效 - [top presentViewController:_stackMode == PRESENT ? controller : [[UINavigationController alloc] initWithRootViewController:controller] animated:_viewOption.animated != GDPBBool_False completion:nil]; + [top presentViewController:_stackMode == PRESENT ? controller : [[UINavigationController alloc] initWithRootViewController:controller] animated:_viewOption.animated != GDPBBool_False completion:_completion]; [self updateData]; } @@ -383,4 +391,4 @@ + (UIViewController *)getVisibleChildViewController:(UIViewController *)parent { return nil; } } -@end \ No newline at end of file +@end