2016-05-10 8 views
2

ウォッチOS 2.0用のクライアントアプリケーションのウォッチキットサポートをアップデートしています。拡張デリゲートからAppleウォッチにモーダルを提示する方法

iOSアプリケーションはローカル通知にカスタムアクションを追加し、ローカル通知が発生したときに電話機がロックされている場合は時計にカスタムボタンを表示させます。

ユーザーがボタンをタップすると、拡張代理人はWCSessionsendMessage:replyHandler:メソッドを使用して電話にメッセージを送信します。

ユーザーが操作のボタンをタップしたときに電話がまだロックされている場合、「あなたの携帯電話をロック解除してください」とメッセージを表示したいとします(「その内容」の詳細は重要ではありません)。

しかし、WatchKit 2.0では、Extensionデリゲートはインターフェイスコントローラとは別のクリッターであり、ウォッチ上で動作します。

presentAlertControllerWithTitle:message:preferredStyle:actions:のようなインターフェイスコントローラを表示するすべてのメソッドは、WKInterfaceControllerのメソッドです。

エクステンションデリゲートから新しいインターフェイスコントローラを表示するにはどうすればよいですか?私はドキュメント(とGoogleの検索)からこれを把握しようとしているが、これまでのところ、かなり広範な検索にもかかわらず、私は打ち砕いてしまった。

答えて

1

拡張機能の委任メッセージに対応してUIを表示しようとすると、同様の問題が発生しました。

[[WKExtension sharedExtension] rootInterfaceController]でルートコントローラを取得できますが、ルートコントローラからコントローラ階層を移動する方法はありません。そのため、他のコントローラをプッシュ/プレゼンテーションする場合にはあまり役に立ちません。私は本当に徹底的に十分にそれをテストしていないのに

私は、一度聴くことになる理論的に一つだけのコントローラ(目に見えるもの)を意味する必要がありwillDisappeardidAppearおよびサブスクライブ解除にNSNotificationCenterに加入してWKInterfaceControllerサブクラスを作成することになりました奇妙なコーナーケースがないことを保証する。

ローカルまたはリモート通知を受け取ったときに拡張代理人が通知を送信し、インターフェイスコントローラの通知コールバックが​​を呼び出し、すべてのインターフェイスコントローラがそのサブクラスから降りてくるだけです。

私は、ウォッチアプリが開いている間にリモート通知を受け取ったときに警告を表示しようとしていましたが、通知アクションからアプリケーションを開くのに応答しませんでした。インターフェイスコントローラdidAppearと拡張デリゲートhandleActionWithIdentifierメソッドの呼び出し順序がわからないため、アクションを処理する際に通知を受信して​​いるインターフェイスコントローラがない可能性があります。 handleAction...が最初に呼び出された場合、didAppearのインターフェイスコントローラにロジックを追加して、表示される保留中の通知があるかどうかを確認し、表示させる必要があります。

+2

ダン、ご回答いただきありがとうございます。このアプリのUIは簡単ではありません。私はいつもルートビューコントローラを使って逃げることができるかもしれないと思う。これは私のAPIのギャップのようです。確かに私たちはこれを行う必要がある唯一の人ではないのですか? –

関連する問題