问题标签 [wkinterfacecontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

navigation - 将基于页面的导航中的初始视图控制器设置为第一个视图以外的其他内容

在 watchOS 中,我正在实现基于页面的导航。基于页面的导航包含三个界面控制器;然而,第一个接口控制器是最先出现的。然而,在我的场景中,我希望第二个接口控制器首先加载,然后他们可以向后/向前滑动以查看其他控制器。反正有没有实现这个功能?

到目前为止尝试的方法:

尝试:使用next page关系 segue 将接口控制器连接在一起,并将其设置Initial interface controller为第二页。

结果:第二个界面控制器确实首先出现;但是,第一个界面控制器被完全忽略,您无法滚动回它。

0 投票
1 回答
981 浏览

watchkit - 如何解除使用 contextForSegue 呈现的 WKInterfaceController?

我有一个WKInterfaceControllerwith a WKInterfaceTable,其中列出了用户在我的应用程序中记录的一些事件。

用户可以点击表格的一行以查看有关该事件的更多详细信息。为了实现这一点,我已经覆盖contextForSegue(withIdentifier:in:rowIndex:)WKInterfaceController包含表格的 ,因此点击一行以模态方式在新的WKInterfaceController名为EventDetailController.

modal演示文稿在故事板上定义。我不能使用push演示文稿,因为WKInterfaceControllerwith是我的应用程序顶层WKInterfaceTable多个实例中的一个页面。WKInterfaceController

这是主要问题:

在 中EventDetailController,有一个删除按钮来销毁表格行所代表的记录。

当用户点击删除按钮时,我会显示一个警报,允许用户确认或取消删除操作。

一旦用户确认删除记录,我想关闭EventDetailController它,因为它不再相关,因为它代表已删除的记录。

这是点击删除按钮时调用的IBAction定义:EventDetailController

问题是 watchOS 似乎不允许这样做。测试此代码时,EventDetailController不会关闭。相反,控制台中会记录一条错误消息:

[WKInterfaceController dismissController]:434: calling dismissController from a WKAlertAction's handler is not valid. Called on <Watch_Extension.EventDetailController: 0x7d1cdb90>. Ignoring

我尝试了一些奇怪的变通方法来试图诱使他们EventDetailController解除,例如在事件被删除时触发通知并EventDetailController从通知观察者调用的函数中解除通知,但这也不起作用。

在这一点上,我在想有一些正确的方法我应该能够关闭 a WKInterfaceController,或者换句话说,反转contextForSegue(withIdentifier:in:rowIndex:)呼叫,但我不知道它是什么。

当我dismiss()直接在IBAction, 而不是在WKAlertAction处理程序中调用时,它可以正常工作,但我不喜欢这种实现,因为它不允许用户先确认操作。

0 投票
0 回答
166 浏览

swift - 未找到 WatchKit 接口控制器

运行我的应用程序时,我收到一个错误,即找不到接口控制器,这会使应用程序在运行时崩溃。

有趣的是,该项目在模拟器中运行良好,但仍然显示错误。在物理手表上,它因内存问题而崩溃

我还检查了这个问题,这对我没有帮助。我有一个基于页面的应用程序,没有其他控制器被推送/弹出/加载。我确实有一个SpriteKit Scene设置在里面InterfaceController,这可能会导致问题。希望你们中的某个人可以帮助我。

那是我的场景:

这是我InterfaceController在情节提要中加载我创建的场景的地方。

以及故事板的相关部分。它只是控制器内的一个场景。

0 投票
1 回答
254 浏览

swift - 如何从另一个控制器中关闭 WKInterfaceController?

我正在创建我的第一个 WatchOS 应用程序作为 iOS 应用程序的伴侣。

手表应用程序需要能够显示一个宾果球,其号码是从手机发送的。因为我不能用 WatchOS 覆盖图像,所以我创建了 6 个 WKInterfaceControllers。一个是“主”控制器,另外 5 个每个都有一个独特的背景图像,这是一个正确颜色(蓝色、红色、灰色、绿色和黄色)的宾果球,然后我用球的字母和数字覆盖一个标签(即 B14)。我找不到动态操作单个 WKInterfaceController 的背景图像的方法 - 但如果有办法这样做 - 我将非常感谢有关如何执行此操作的提示,并且我的其他问题将不存在。

目前,我正在使用主控制器中的 WatchConnectivity 来接收来自手机的更新。当电话发送一个号码时,代码确定它需要的颜色,然后以下代码为 WKInterfaceController 提供正确的颜色背景:

我遇到的问题是,一旦我激活了第一个颜色控制器,我就无法在不关闭当前活动的控制器的情况下激活不同的颜色控制器。

那么 - 我该怎么做呢?我想我只需要一种方法来保存对活动控制器的引用,这样我就可以在激活下一个球之前关闭它——但我不知道该怎么做。

如果有人能在这里帮助我指出正确的方向,我将不胜感激……

提前致谢

0 投票
0 回答
292 浏览

ios - WKInterfaceController 的 becomeCurrentPage 没有按预期工作

我正在将 4 个 WKInterfaceControllers 加载到 watchKit 中基于页面的水平界面中。在此处输入图像描述当委托回调触发警告应用程序屏幕已被水锁时,我希望手表继续使用其中一个控制器(基于用户设置)。使用下面的代码,如果代理在水锁时触发,应用程序将按MainDisplayInterfaceController预期继续。但是,如果委托在其他两个 interfaceControllers 中的任何一个中触发,屏幕似乎会继续,但随后会回到原来的状态WorkoutControlsInterfaceController(即 0),但是屏幕底部的页面控件是 2 of 4?这可能是 WatchKit 错误吗?

编辑:我注意到的一个线索是,在第一个水锁上我得到了上述行为。但是如果我解锁然后再次锁定,我会得到预期的行为。

0 投票
0 回答
135 浏览

swift - 如何将 viewModel 类注入 WKInterfaceController?

我正在尝试将我的 viewModel 类注入到 WKInterfaceController,在我的 InterfaceController 中我设置了属性,但是当我尝试在其中使用它时func awake(withContext context: Any?),它为零。

所以我尝试这样做的方式是:在 ExtensionDelegate 中设置容器,并在方法 onInitCompleted 中使用 viewModel 类向它注册我的interferenceController。

我的代码:

https://pastebin.com/jFaLHi2m

在我尝试使用我的 viewModel 的那一行,我得到:

线程 1:EXC_BREAKPOINT(代码=1,子代码=0x524abc)

你知道如何正确地将类注入 WKInterfaceController 吗?

0 投票
1 回答
60 浏览

swift - WATCH OS:如何寻找 WKInterfaceInlineMovie

使用“WKInterfaceInlineMovie”成功播放视频。但是,我需要一个从中间开始播放视频的选项。这可能吗?此外,没有委托方法可以知道视频何时结束。

0 投票
1 回答
361 浏览

ios - 如何在 WatchOS 的基于页面的界面中显示警报?

我的手表应用程序有一个基于页面的界面,我真的不知道屏幕上当前是什么 InterfaceController(它可能是 4 个中的 1 个),但是无论应用程序在哪个屏幕上,我都需要弹出警报。鉴于我不一定知道哪个 InterfaceController 是“当前的”,我如何显示警报?下面的代码只有在用户导航到这个 InterfaceController 时才会运行。如果用户不在该页面上,那么我会在控制台中看到此错误2019-09-22 15:42:01.597663-0400 Watch Extension[501:526217] Warning: Attempt to present <PUICAlertSheetController: 0x18158c00> on <SPInterfaceViewController: 0x1795e800> whose view is not in the window hierarchy!

0 投票
0 回答
25 浏览

swift - 如何获取 Apple Watch 显示半径?

有没有办法获得显示半径?我尝试使用contentSafeAreaInsets,但它们内部为 0 willActivate()awake(withContext:)这非常令人沮丧。

0 投票
1 回答
200 浏览

ios - 如何修复 Apple Watch 页面控制器中缺少的界面控制器?

我发现的是?

尝试在根页面控制器内的界面控制器之间水平滚动。

  1. 一段时间后随机(30-1分钟)。

  2. 您会发现其中一个接口控制器丢失了。

  3. 显示空白视图,UI 完全消失。(没有界面的黑色视图)。

  4. 尝试在 XCode 中打开视图调试器,您会发现页面视图控制器层次结构中缺少视图的界面窗口。

重现

  • 创建一个新的应用程序。

  • 创建一个新的 Watch 应用程序

  • 在情节提要中添加了 2 个额外的界面控制器

  • 为两者添加标识符

  • 在初始接口控制器调用内部

WKInterfaceController.reloadRootPageControllers(withNames: ["View1","View2"], contexts: ["View1","View2"], orientation: .horizontal, pageIndex: 1)

  • 在 Watch OS 6 Series 3(模拟器或 A 设备)上运行应用程序
  • 尝试随机滚动

我期望 Page 控制器能够保持界面控制器应有的状态,并且在用户滚动时它不应该显示空白的黑屏。