首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将“菜单”按钮行为更改为不终止应用程序

如何将“菜单”按钮行为更改为不终止应用程序
EN

Stack Overflow用户
提问于 2019-09-05 12:44:11
回答 2查看 365关注 0票数 1

刚开始的时候,我不想从苹果的用户体验指南中改变用户体验,实际上我想把它带回到我的应用程序中,所以问题是:

“菜单”按钮应该返回导航层次结构中的一个级别,如果不再有级别,则终止应用程序。

我的第一个导航屏幕也有一个最初隐藏的全屏视图(例如视频播放器)。从第一个导航屏幕上,用户可以进入更深的级别。“菜单”按钮有其正确的标准行为。

然后,最深的导航级别显示隐藏的全屏视图。当用户按下“菜单”时,导航应该回到最后一个级别,但它却终止了App。

我如何才能改变“菜单”按钮的行为仅针对这个单一的视图?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 09:42:34

要做到这一点并不难。只需确保向用户显示的初始屏幕不是根视图。

我会把堆栈放在这里。根视图包含两个视图,即,

  1. VideoContainerView和
  2. MainContainerView。

VideoContainerView将有一个UIViewController,它有menuHandler按钮侦听器。这个VC在按钮按下的RootView上显示RootView。

MainContainerView将有UIViewController,它没有任何menuHandler。MainContainerView显示在VideoContainerView的顶部。

堆栈

MainContainerView (Top)

VideoContainerView

RootViewController

RootView -> VideoContainerView (包含VideoScreenController的视图) RootView -> MainContainerView (包含MainViewController的视图)

RootView -> VideoContainerView -> VideoScreen (初始屏幕,确保这是一个使用ContainerView显示在FirstView之上的视图控制器)。

在VideoScreenController中,菜单按钮按将显示RootView的MainContainerView,该MainContainerView一直隐藏在VideoContainerView的顶部。

在下一个菜单按钮,应用程序将转到后台,因为MainViewController不处理任何菜单按钮按下。

从不在RootView的topView.上收听任何MenuButton新闻。

一个人可以很容易地控制首选的焦点流,

代码语言:javascript
复制
override var preferredFocusEnvironments: [UIFocusEnvironment] {
   if topView.isHidden {
      return [VideoContainerView]
   } else {
      return [MainContainerView]
   }

}

像wise一样,让preferredFocusEnvironments在每个ViewController中处理初始的首选焦点,这样系统就可以知道哪个是当前的焦点。

上面的代码,帮助系统知道,哪个视图应该专注于启动或每个焦点的更改。

票数 0
EN

Stack Overflow用户

发布于 2019-09-05 16:02:02

真正让你的应用程序退出的是,如果按下菜单按钮的pressesEnded:withEvent:,它就会一直延伸到UIApplication的响应链上。因此,如果你阻止这种情况发生,应用程序就不会退出。

有两种方法可以做到这一点:响应链中的某个人需要覆盖该方法而不调用super,或者响应链中的某个人需要一个手势识别器来识别按钮按下。

例如,UINavigationController使用后者。如果导航堆栈位于其根目录,它也会禁用该手势;这样,试图弹出最后一个视图控制器的尝试实际上退出了应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57805799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档