防止关闭模态 WKInterfaceController

Prevent dismissing modal WKInterfaceController

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

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

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

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

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

When the user taps the title string, WatchKit automatically dismisses the modal interface without taking any further actions.

你能做什么?

而你 don't know when the Cancel title is tapped, there is a hack which "hides" the Cancel title.

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

HIG 推荐什么?

规避 Human Interface Guideline 可能会降低整个用户体验。

The top-left corner of the modal sheet is reserved for the Close button, which dismisses the interface.

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

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

  • 模态框在多次取消后再次出现

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

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

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

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