Skip to content

Commit 7ee9e0b

Browse files
author
caven775
committed
iOS兼容性
1 parent ee1b67a commit 7ee9e0b

File tree

1 file changed

+39
-26
lines changed

1 file changed

+39
-26
lines changed

ios/Classes/Stack/DNavigator.m

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presenta
219219
{
220220
NSString *name = presentationController.oldDismissDelegateName;
221221
UIViewController *presented = presentationController.presentedViewController;
222+
presented.isGesturePoped = YES;
222223
if ([presented isKindOfClass:UINavigationController.class]) {
223224
presented = [(UINavigationController *)presented topViewController];
224225
}
@@ -238,22 +239,7 @@ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentati
238239
if ([presented isKindOfClass:UINavigationController.class]) {
239240
presented = [(UINavigationController *)presented topViewController];
240241
}
241-
UIViewController *willAppear = presented.presentingViewController;
242-
if ([willAppear isKindOfClass:UITabBarController.class]) {
243-
willAppear = [(UITabBarController *)willAppear selectedViewController];
244-
if ([willAppear isKindOfClass:UINavigationController.class]) {
245-
willAppear = [(UINavigationController *)willAppear topViewController];
246-
}
247-
} else if ([willAppear isKindOfClass:UINavigationController.class]) {
248-
willAppear = [(UINavigationController *)willAppear topViewController];
249-
}
250-
if ([willAppear isKindOfClass:DFlutterViewController.class]) {
251-
DStack *stack = [DStack sharedInstance];
252-
if (!stack.engine.viewController) {
253-
DFlutterViewController *flutterVC = (DFlutterViewController *)willAppear;
254-
[flutterVC willUpdateView];
255-
}
256-
}
242+
[self willAppearViewController:presented.presentingViewController];
257243
[self checkSelectorToDelegate:@selector(presentationControllerWillDismiss:)
258244
controller:presentationController
259245
forward:^(id<UIAdaptivePresentationControllerDelegate> delegate) {
@@ -269,16 +255,7 @@ - (void)presentationControllerDidDismiss:(UIPresentationController *)presentatio
269255
target = [[(UINavigationController *)presented viewControllers] firstObject];
270256
checkNode(target, DNodeActionTypePopTo);
271257
}
272-
273-
DNodeManager *manager = [DNodeManager sharedInstance];
274-
DNode *didAppearNode = [manager preNode];
275-
if (didAppearNode.pageType == DNodePageTypeFlutter) {
276-
DStack *stack = [DStack sharedInstance];
277-
if (stack.engine.viewController) {
278-
DFlutterViewController *flutterVC = (DFlutterViewController *)stack.engine.viewController;
279-
[flutterVC didUpdateView];
280-
}
281-
}
258+
[self didAppearViewControllerWithGestureDismiss:YES];
282259
checkNode(target, DNodeActionTypeGesture);
283260
[self checkSelectorToDelegate:@selector(presentationControllerDidDismiss:)
284261
controller:presentationController
@@ -337,6 +314,38 @@ - (BOOL)gestureRecognizerShouldBeginWithNavigationController:(UINavigationContro
337314
return shouldBegin;
338315
}
339316

317+
- (void)willAppearViewController:(UIViewController *)willAppear
318+
{
319+
if ([willAppear isKindOfClass:UITabBarController.class]) {
320+
willAppear = [(UITabBarController *)willAppear selectedViewController];
321+
if ([willAppear isKindOfClass:UINavigationController.class]) {
322+
willAppear = [(UINavigationController *)willAppear topViewController];
323+
}
324+
} else if ([willAppear isKindOfClass:UINavigationController.class]) {
325+
willAppear = [(UINavigationController *)willAppear topViewController];
326+
}
327+
if ([willAppear isKindOfClass:DFlutterViewController.class]) {
328+
DStack *stack = [DStack sharedInstance];
329+
if (!stack.engine.viewController) {
330+
DFlutterViewController *flutterVC = (DFlutterViewController *)willAppear;
331+
[flutterVC willUpdateView];
332+
}
333+
}
334+
}
335+
336+
- (void)didAppearViewControllerWithGestureDismiss:(BOOL)gesture
337+
{
338+
DNodeManager *manager = [DNodeManager sharedInstance];
339+
DNode *didAppearNode = gesture ? [manager preNode] : [manager currentNode];
340+
if (didAppearNode.pageType == DNodePageTypeFlutter) {
341+
DStack *stack = [DStack sharedInstance];
342+
if (stack.engine.viewController) {
343+
DFlutterViewController *flutterVC = (DFlutterViewController *)stack.engine.viewController;
344+
[flutterVC didUpdateView];
345+
}
346+
}
347+
}
348+
340349
- (NSMutableDictionary<NSString *,id> *)dismissDelegateClass
341350
{
342351
if (!_dismissDelegateClass) {
@@ -447,6 +456,7 @@ - (void)d_stackDismissViewControllerAnimated:(BOOL)flag completion:(void (^)(voi
447456
UIViewController *dismiss = _DStackCurrentController(self);
448457
if (!dismiss.isGesturePoped) {
449458
// 不是手势触发的dismiss
459+
[[DStackNavigator instance] willAppearViewController:dismiss.presentingViewController];
450460
checkNode(dismiss, DNodeActionTypeDismiss);
451461
}
452462
}
@@ -473,6 +483,9 @@ - (void)d_stackViewDidDisappear:(BOOL)animated
473483
if (![self isFlutterViewController]) {
474484
[self removeGesturePopNode];
475485
}
486+
if (self.beingDismissed && !self.isGesturePoped) {
487+
[[DStackNavigator instance] didAppearViewControllerWithGestureDismiss:NO];
488+
}
476489
}
477490

478491
- (void)setIsGesturePoped:(BOOL)isGesturePoped

0 commit comments

Comments
 (0)