如何关闭并推送新的 ViewController

Posted

技术标签:

【中文标题】如何关闭并推送新的 ViewController【英文标题】:How to dismiss and push new ViewController 【发布时间】:2015-10-12 10:27:27 【问题描述】:

在我的应用程序中有一个浮动按钮。它的功能是从任何地方打开可用的屏幕。

场景

假设我有 4 个屏幕,每个屏幕中都有浮动按钮。

1. Home Screen
2. Services Screen
3. Contact Screen
4. Events

现在假设我已经打开了所有屏幕。目前我在联系屏幕中,我想去服务。

然后我必须再次推送服务,从而创建服务屏幕对象。这会产生一个问题,好像用户访问服务 10 次,然后将创建 10 个新对象。

我该如何实现这个场景?

我的代码:

 if([sender tag]==1)
   
      [push home];
   

 else if([sender tag]==2)
   
      [push services];
   
else if([sender tag]==3)
   
      [push Contact];
   
 else

 
     [push events];
 

【问题讨论】:

究竟如何从任何地方打开屏幕?所有这些屏幕都包含在哪里?这些是否由 UIViewController 实例表示? 是的,都是 UIViewController 实例 请发布当你的floating button 被点击时执行的代码? @NSUser 你考虑过 UITabBarController 吗? @rptwsthi 我不能使用标签栏,因为我的应用程序开发了我必须添加一个浮动按钮 【参考方案1】:

我更喜欢使用UITabBarController

【讨论】:

尊敬的用户,请不要在不给出任何解释的情况下对答案投反对票。 UITabBarController 专为上述应用程序的可访问性而设计。此外,使用 UITabBarController 将确保它包含的所有内容都将被实例化一次并按需呈现,而不会有任何 UI 状态损坏的风险。【参考方案2】:

试试这个。

UIViewController *popViewController = //assign here Services Screen or what view you want to back

BOOL isExist = NO;
for (UIViewController *viewController in self.navigationController.viewControllers) 
    if ([viewController isEqual:popViewController]) 
        isExist = YES;//exist view controller. so you should not create a new one
        [self.navigationController popViewControllerAnimated:YES];
    


if (isExist==NO) //not exist view controller. so you should create a new one
    [self.navigationController pushViewController:YourViewController animated:YES];

【讨论】:

兄弟,我想根据用户选择弹出并推送新屏幕。 如果我在主屏幕然后打开服务会怎样【参考方案3】:

@NSUser,很抱歉没有回答您的确切问题,但我建议使用UIPageViewController 进行“托管”并一次显示一个内容视图控制器。这是来自 Apple 的概念性document,其中包含基本描述和操作方法。祝你好运。

【讨论】:

以上是关于如何关闭并推送新的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何像 Skype 一样回复推送通知? [关闭]

如何在不导航到该 url 的情况下推送历史记录条目并更改地址栏 url?

收到推送通知后如何触发操作[关闭]

如何从嵌入在视图控制器中的表视图中的集合视图中传递数据并推送新的视图控制器?

如何在 Cordova 到达并且应用程序关闭时处理推送通知

应用程序推送通知 - 收到并导航到屏幕 - 应用程序何时关闭?