Skip to content

Commit a68fcc7

Browse files
author
alonsolu
committed
GDDViewControllerTransition support completion block
1 parent 3accacf commit a68fcc7

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
3232

3333
- (GDDViewControllerTransition *(^)(id data))data;
3434
- (GDDViewControllerTransition *(^)(GDDPBViewOption *viewOption))viewOption;
35+
- (GDDViewControllerTransition *(^)(void (^completion)()))completion;
3536

3637
/**
3738
* 总是创建新的 ViewController 实例, 并显示

GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ @implementation GDDViewControllerTransition {
1616
enum GDDViewControllerTransitionStackMode _stackMode;
1717
BOOL _alreadyInStack; // 是否已经显示过了
1818
Class _viewControllerClass;
19+
void (^_completion)(void);
1920
}
2021

2122
- (GDDViewControllerTransition *(^)(id data))data {
@@ -32,6 +33,13 @@ @implementation GDDViewControllerTransition {
3233
};
3334
}
3435

36+
- (GDDViewControllerTransition *(^)(void (^completion)()))completion {
37+
return ^GDDViewControllerTransition *(void (^completion)()) {
38+
_completion = completion;
39+
return self;
40+
};
41+
}
42+
3543
- (id <GDDTransitionBuilder> (^)(Class viewControllerClass))toClass {
3644
return ^id <GDDTransitionBuilder>(Class viewControllerClass) {
3745
if (_viewOption.launchMode) {
@@ -124,7 +132,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found {
124132
}
125133
UIViewController *rootViewController = UIApplication.sharedApplication.keyWindow.rootViewController;
126134
if (rootViewController.presentedViewController) { // 避免内存泄漏, 以释放 rootViewController 和 rootViewController.presentedViewController
127-
[rootViewController dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:nil];
135+
[rootViewController dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:_completion];
128136
}
129137
UIWindow *window = UIApplication.sharedApplication.delegate.window;
130138
if (!window) {
@@ -149,7 +157,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found {
149157
// bring viewController to front
150158
UIViewController *controller = self.viewController;
151159
if (controller.presentedViewController) {
152-
[controller dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:nil];
160+
[controller dismissViewControllerAnimated:_viewOption.animated != GDPBBool_False completion:_completion];
153161
}
154162
UIViewController *current = controller;
155163
while (current.parentViewController) {
@@ -200,7 +208,7 @@ - (void)displayAndRefresh {
200208
}
201209

202210
[self config:YES]; // 某些 ViewOption 需要在 present 之前设置才会生效
203-
[top presentViewController:_stackMode == PRESENT ? controller : [[UINavigationController alloc] initWithRootViewController:controller] animated:_viewOption.animated != GDPBBool_False completion:nil];
211+
[top presentViewController:_stackMode == PRESENT ? controller : [[UINavigationController alloc] initWithRootViewController:controller] animated:_viewOption.animated != GDPBBool_False completion:_completion];
204212
[self updateData];
205213
}
206214

@@ -383,4 +391,4 @@ + (UIViewController *)getVisibleChildViewController:(UIViewController *)parent {
383391
return nil;
384392
}
385393
}
386-
@end
394+
@end

0 commit comments

Comments
 (0)