我正在更新Watch OS 2.0客户端应用程序的监视工具包支持。
iOS应用程序向本地通知添加自定义操作,如果在本地通知触发时手机被锁定,则会导致手表显示自定义按钮。
当用户点按该按钮时,分机代表会使用WCSession
sendMessage:replyHandler:
方法向手机发送消息。
如果用户点击操作按钮时手机仍处于锁定状态,我想向用户显示一条消息,说“请解锁手机”(有关“这些内容”的详细信息并不重要。)
但是,在WatchKit 2.0中,Extension委托是与接口控制器分开的一个小动物,并在手表上运行。
我能找到的所有显示接口控制器的方法,如presentAlertControllerWithTitle:message:preferredStyle:actions:
,都是WKInterfaceController的方法。
如何从Extension委托中显示新的接口控制器?我试图从文档(以及谷歌搜索)中弄清楚这一点,但到目前为止,尽管进行了相当广泛的搜索,但我已经完成了。
答案 0 :(得分:1)
在尝试显示UI以响应扩展委托消息时,我遇到了类似的问题。
您可以通过[[WKExtension sharedExtension] rootInterfaceController]
获取根控制器,但是没有任何方法可以从根控制器中走出控制器层次结构,因此如果您推送/呈现其他控制器,它并不是非常有用
我最终创建了一个WKInterfaceController
子类,在NSNotificationCenter
上订阅didAppear
并在willDisappear
上取消订阅,理论上应该只指一个控制器(可见一个)虽然我没有彻底测试它以确保没有任何奇怪的角落案例。
扩展委托在收到本地或远程通知时发送通知,接口控制器中的通知回调只调用presentAlertControllerWithTitle:...
,所有接口控制器都从该子类继承。
我正在尝试在手表应用程序打开时收到远程通知时显示警报,而不是响应通知操作中的应用程序打开。我不确定接口控制器didAppear
和扩展委托handleActionWithIdentifier
方法的调用顺序,因此在处理操作时可能没有任何接口控制器监听通知。如果首先调用handleAction...
,那么您可能需要在didAppear
上向接口控制器添加一些逻辑,以检查是否有某些待处理通知显示并让它显示出来。