如何从呈现的视图控制器上的按钮操作推送视图控制器

Posted

技术标签:

【中文标题】如何从呈现的视图控制器上的按钮操作推送视图控制器【英文标题】:How to push viewcontroller from button action on the presented view controller 【发布时间】:2018-02-26 14:11:50 【问题描述】:

我一直在寻找答案,有人可以指导我吗,因为我有一个带有 tableview 的 TabBar 控制器,现在的情况是,如果用户没有登录并单击任何行,那么视图控制器会显示清晰颜色以具有 UIButton 的小视图呈现。现在我的 TabBar 控制器是一个嵌入了导航控制器的 rootview 控制器,但是当我对呈现的视图控制器的 UIButton 采取操作时,我无法推送登录视图控制器。

TabBarController(嵌入导航控制器和根视图控制器)..> 全屏自定义弹出视图控制器已呈现,当从此处单击登录按钮时.....> 我想推送登录视图控制器它可以有一个返回导航到 Tabbar 控制器。

有人可以指导我吗?提前致谢。

【问题讨论】:

【参考方案1】:

我相信您首先需要关闭当前的视图控制器 (loginViewController) 并在完成块中推送新的视图控制器。所以在登录视图控制器中,试试这个:

let presentingController = self.presentingViewController
self.dismiss(animated: true) 
    presentingController?.navigationController?.pushViewController(NewViewController(), animated: true)

【讨论】:

@AdeelIlyas 对不起,我可以读取 objc,但不会写它.. 但它应该很简单,你声明一个变量,将 self.presentingViewController 的值赋值给它,然后在完成回调关闭推送新的视图控制器 感谢您的帮助,因为这也是可能的,我尝试将视图控制器与导航控制器一起嵌入并推送所需的内容。【参考方案2】:

您可以使用委托来指示呈现视图控制器关闭模态并推送所需的视图控制器

【讨论】:

【参考方案3】:

你有没有尝试添加动画

CATransition *transition = [[CATransition alloc] init];
transition.duration = 0.5;
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view.window.layer addAnimation:transition forKey:kCATransition];
[self presentViewController:dashboardWorkout animated:false completion:nil];

【讨论】:

以上是关于如何从呈现的视图控制器上的按钮操作推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

从弹出控制器推送视图控制器

模态下的弹出/推送视图

推送后视图上的按钮将不起作用,然后呈现一个 UIViewController

如何将视图控制器从视图控制器推送为全屏幕,呈现为半模式

无法推送或呈现视图控制器

如何关闭已呈现未推送的多个视图控制器?