【问题标题】:How to dismiss and push new ViewController如何关闭并推送新的 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 我不能使用标签栏,因为我的应用程序开发了我必须添加一个浮动按钮

标签: ios objective-c uinavigationcontroller


【解决方案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,其中包含基本描述和操作方法。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2017-05-25
    相关资源
    最近更新 更多