防止关闭模式 WKInterfaceController

Posted

技术标签:

【中文标题】防止关闭模式 WKInterfaceController【英文标题】:Prevent dismissing modal WKInterfaceController 【发布时间】:2016-03-18 13:50:37 【问题描述】:

有没有办法阻止用户关闭模态控制器?

我认为在要求用户打开 iPhone 对应界面或在那里执行某些操作时想要“阻止”Watch App 主界面是很常见的。

我目前的解决方案是在控制器被关闭但笨重时再次呈现控制器。

【问题讨论】:

【参考方案1】:

使用reloadRootControllers 解决此问题的方法有些笨拙。当您使用您在情节提要中命名的 WKInterfaceController 的名称调用 reloadRootControllers(withNamesAndContexts:) 时,它与以模态方式呈现该控制器具有类似的效果。但是,由于它现在是 root 控制器,因此它没有取消按钮。我不太喜欢这样,但它确实完成了工作。

请注意,此方法自 watchOS 4 起已弃用。 Apple Documentation on reloadRootControllers(withNamesAndContexts:)

【讨论】:

我认为这可能是一种避免模态的有效方法。除非需要动画和实际的模态功能,否则他们可能不希望从模态开始。我要补充一点,通过将它们连接到情节提要中并在名称数组中传递标识符,这是迁移到另一组“页面”的好方法。 (谢谢本)【参考方案2】:

诀窍是使模态屏幕全屏并更改主组的插入顶部值。

【讨论】:

【参考方案3】:

您无法阻止模态界面控制器被解除,因为系统会在点击标题时自动解除它。

由于不会询问您的代码是否应该发生,而是只知道它正在发生,因此无法拦截或取消该操作。 WKInterfaceController documentation 简要介绍了这一点。

当用户点击标题字符串时,WatchKit 会自动关闭模态界面不采取任何进一步的行动

你能做什么?

当你don't know when the Cancel title is tapped时,有a hack which "hides" the Cancel title。

这可能会让想知道如何关闭模态框的用户感到困惑,或者误导其他人认为无法关闭模态框。

HIG 推荐什么?

绕过Human Interface Guideline 可能会降低整个用户体验。

模态表的左上角是为关闭按钮保留的,它会关闭界面。

一些用户可能会感到沮丧或恼火

没有明显的取消方式,或者

模态在反复被取消后再次出现。

由于用户希望能够关闭模式,也许您可​​以允许他们这样做,然后简单地在呈现界面控制器中显示某种形式的提醒(登录或启用权限)。

【讨论】:

令我非常恼火的是,Apple 在几个内置应用程序中炫耀自己的指南: * 在Alarm 应用程序中,Add Alarm 推送到带有 / 的“全屏”界面左下角的 Cancel 按钮而不是标题栏(完全隐藏)。 * Messages 应用程序在New Message 菜单中做了类似的事情,它打开了一个无法点击标题栏的模式,而Cancel 按钮位于左下方。但是,据我所知,我的应用不可能有相同的行为。 在我的例子中,应用程序记录来自传感器的数据,知道用户何时点击返回按钮非常重要,因为应用程序需要停止记录。否则,如果用户来回导航到控制器几次,可能会发生分配的多个记录器无法停止的情况。这可能会导致应用程序占用其所有内存。

以上是关于防止关闭模式 WKInterfaceController的主要内容,如果未能解决你的问题,请参考以下文章

如何防止从 dopostback 关闭引导模式?

响应式文件管理器。防止模式关闭图像选择

Twitter Bootstrap / jQuery - 如何暂时防止模式被关闭?

提交表单后如何防止模式关闭

单击背景时如何防止laravel jetstream模式关闭?

html 在点击外侧时防止关闭BOOTSTRAP模式