Skip to content

Commit 2299290

Browse files
author
Larry Tin
committed
fix refresh with toUp
1 parent 85bc521 commit 2299290

1 file changed

Lines changed: 24 additions & 10 deletions

File tree

GDDataDrivenView/Classes/ViewControllerPresenter/GDDViewControllerTransition.m

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ @implementation GDDViewControllerTransition {
6969
- (void (^)())toUp {
7070
return ^{
7171
_alreadyInStack = YES;
72-
_viewController = GDDViewControllerTransition.backViewController ?: GDDViewControllerTransition.topViewController;
72+
_viewController = GDDViewControllerTransition.upViewController;
7373
[self mergeViewOption];
7474
[self displayAndRefresh];
7575
};
@@ -253,20 +253,29 @@ + (UIViewController *)findTopViewController:(UIViewController *)parent {
253253
if (parent.presentedViewController && !parent.presentedViewController.isBeingDismissed) {
254254
return [self findTopViewController:parent.presentedViewController];
255255
}
256-
UIViewController *child = [self getVisibleChildViewController:parent];
257-
return child ? [self findTopViewController:child] : parent;
256+
return [self findVisibleChildViewController:parent];
258257
}
259258

260-
+ (UIViewController *)backViewController {
261-
UIViewController *top = GDDViewControllerTransition.topViewController;
262-
NSArray *navViewControllers = top.navigationController.viewControllers;
259+
+ (UIViewController *)upViewController {
260+
UIViewController *current = self.topViewController;
261+
NSArray *navViewControllers = current.navigationController.viewControllers;
263262
if (navViewControllers.count > 1) {
264263
return navViewControllers[navViewControllers.count - 2];
265-
} else if (top.presentingViewController) {
266-
UIViewController *child = [self getVisibleChildViewController:top.presentingViewController];
267-
return child ?: top.presentingViewController;
268264
}
269-
return nil;
265+
if (current.presentingViewController) {
266+
return [self findVisibleChildViewController:current.presentingViewController];
267+
}
268+
269+
while (current.parentViewController) {
270+
UIViewController *parent = current.parentViewController;
271+
if ([parent isMemberOfClass:UIPageViewController.class] || [parent isMemberOfClass:UINavigationController.class] ||
272+
[parent isMemberOfClass:UITabBarController.class]) { // skip system's view controllers
273+
current = parent;
274+
continue;
275+
}
276+
return parent;
277+
}
278+
return current;
270279
}
271280

272281
+ (UIViewController *)findViewController:(Class)viewControllerClass {
@@ -327,6 +336,11 @@ + (BOOL)isSame:(id)controllerOrClass with:(UIViewController *)otherController in
327336
return isInstance ? controllerOrClass == otherController : [otherController isKindOfClass:controllerOrClass];
328337
}
329338

339+
+ (UIViewController *)findVisibleChildViewController:(UIViewController *)parent {
340+
UIViewController *child = [self getVisibleChildViewController:parent];
341+
return child ? [self findVisibleChildViewController:child] : parent;
342+
}
343+
330344
+ (UIViewController *)getVisibleChildViewController:(UIViewController *)parent {
331345
if ([parent isKindOfClass:UINavigationController.class]) {
332346
return ((UINavigationController *) parent).topViewController;

0 commit comments

Comments
 (0)