如何关闭并推送新的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在不导航到该 url 的情况下推送历史记录条目并更改地址栏 url?