【发布时间】:2015-10-25 09:32:19
【问题描述】:
我在 UINavigationController 中嵌入了整个应用程序。现在有几个模块供用户选择的主屏幕。现在,当用户单击该模块时,它是 NAVIGATED 并且如果用户希望从任何其他可用模块中选择另一个模块,导航栏中有一个按钮,它以模态方式在当前模块顶部呈现 HomeViewController,然后用户可以从那里选择任何不会显示的模块,而是他们将导航。
现在我所做的是在 HomeViewController 上创建了一个名为 navigate 的委托,它将被每个模块的视图控制器覆盖,并且它将使用新的 ViewController 的引用。然后,当调用此方法时,我首先将 HomeViewController 关闭,然后导航到我有参考的新 ViewController。
现在,真正的问题是,有时从一个模块导航到另一个模块时会出现抖动,但有时它可以正常工作。这就是为什么我也无法调试。混蛋是,当从 HomeViewController 中单击一个模块时,主屏幕消失并再次出现,然后它实际导航。
从 HomeViewController 导航到模块的代码是
RadiusSearchViewController *rad = [self.storyboard instantiateViewControllerWithIdentifier:@"RadiusSearchViewController"];
[self.delegate navigate:rad];
所有模块中的这个导航覆盖方法是
-(void)navigate:(UIViewController*)uiViewController{
NSLog(@"inside navigate method");
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
[self.navigationController pushViewController:uiViewController animated:YES];
}
我向你保证,它会以这种方式出现。
现在以模态方式呈现 HomeViewController 的代码是
ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"];
vc.view.backgroundColor = [[UIColor whiteColor]colorWithAlphaComponent:0];
vc.delegate = self;
vc.providesPresentationContextTransitionStyle = YES;
vc.definesPresentationContext = YES;
vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
vc.fromOutside = true;
NSLog(@"Presneting...");
[self presentViewController:vc animated:NO completion:nil];
显示而不导航 HomeViewController 的原因是它以透明的形式出现在当前模块的顶部,这是必要的。
请记住:有时并非所有时间都会发生这种情况。就像你可以说一半。
【问题讨论】:
-
[self.presentedViewControllerdismissViewControllerAnimated:YES 完成:nil]; [self.navigationController pushViewController:uiViewController 动画:YES];这应该像 [self.presentedViewController dismissViewControllerAnimated:YES 完成:^{[self.navigationController pushViewController:uiViewController animated:YES];}];这将确保在关闭完成后调用导航视图控制器。检查它是否能解决您的问题。
-
@KarunPant75 工作正常.. 让我们看看它继续工作有多好.. 谢谢
-
将此添加为其他有同样问题的人的答案,如果它有效,请接受或至少支持:)
标签: ios objective-c uinavigationcontroller presentmodalviewcontroller presentviewcontroller