元のドキュメント: developer.apple.com/documentation/watchkit/wkinterfacecontroller


クラス


WKInterfaceController


watchOS アプリのインターフェースを管理するためのインフラストラクチャを提供するクラス。


watchOS 2.0+

@MainActor
class WKInterfaceController




概観


インターフェイスコントローラは、実際のビューを管理しない点を除けば、UIKit アプリにおける UIViewController オブジェクトと同様の役割を果たします。これは WatchKit 拡張機能内で動作し、Watch アプリのストーリーボードファイル内のインターフェイスコントローラに関連した動作をリモートで管理します。WKInterfaceController をサブクラス化し、そのメソッドを使用してストーリーボードシーンの要素を構成したり、それらの要素に対する操作に応答したりします。


あなたのインターフェイスコントローラのコードはユーザーの Apple Watch 上でローカルに実行されますが、そのコードが管理するインターフェイスとは分離されています。コード内でインターフェイスオブジェクトの値を変更すると、システムは必要な情報をあなたの Watch アプリに転送し、アプリが画面上でそれに応じた変更を行います。



インターフェースコントローラーの初期化


ユーザーがアプリのコンテンツを操作すると、システムはあなたの拡張機能を起動し、適切なインターフェイスコントローラオブジェクトを自動的に作成します。アプリは、通知用とアプリインターフェイスを管理するためにそれぞれ異なるインターフェイスコントローラを使用しますが、WatchKit はアプリのメインストーリーボードファイル内の情報に基づいて、どのインターフェイスコントローラをロードするかを決定します。通知シーンは、システムがそれらを識別できるように特別に構成されています。あなたのアプリの場合、WatchKit は起動時にアプリのメインインターフェイスコントローラを読み込みますが、起動時に初期インターフェイスコントローラに変更することも可能です。


インターフェイスコントローラを作成する際、WatchKit はそのクラスをインスタンス化し、init() メソッドを呼び出します。このメソッドは、変数の初期化やデータのロードには使用できますが、ユーザーインターフェイスの構成には使用しないでください。このメソッドが実行される時点では、コントローラのユーザーインターフェイス要素が適切に初期化されていない可能性があるためです。


次に、システムは awake(withContext:) メソッドを呼び出します。WatchKit が awake(withContext:) メソッドに有効なオブジェクトが渡された場合は、そのオブジェクトの情報を使用して初期化処理をカスタマイズしてください。また、この時点ではコントローラのユーザーインターフェイス要素が利用可能であることが保証されています。つまり、このメソッド内で安全にユーザーインターフェイスを構成できるということです。


willActivate() メソッドは、インターフェイスがアクティブになろうとしているタイミングを通知します。コンテンツの更新確認など、直前に行うべき処理には willActivate() メソッドを使用しますが、主要な初期化処理には使用しないでください。


willActivate() メソッドは、インターフェイスがまだ画面に表示されていないタイミングで呼び出されることがあります。例えば、コンテンツを更新する時間を確保するために、WatchKit が事前にこのメソッドを呼び出す場合があります。WatchKit はインターフェイスが表示状態になったことを、didAppear() メソッドの呼び出しによって通知します。同様に、WatchKit は、インターフェイスが再び画面から消える際には、willDisappear() および didDeactivate() メソッドを呼び出します。


重要


インターフェイスコントローラがそのインターフェイスを変更できるのは、awake(withContext:) メソッド内、willActivate() メソッド内、およびインターフェイスがアクティブな期間中のみです。システムが didDeactivate() メソッドを呼び出した後は、次に willDisappear() メソッドが呼び出されるまで、コントローラのインターフェイスオブジェクトの値を変更しようとする試みはすべて無視されます。


iOS シミュレータでは、Hardware > Lock を選択してシミュレータをロックすると、WatchKit は現在のインターフェイスコントローラの didDeactivate() メソッドを呼び出します。その後シミュレータのロックを解除すると、WatchKit はそのインターフェイスコントローラの willActivate() メソッドを再び呼び出します。この機能を利用して、アクティベーションおよびディアクティベーションのコードをデバッグすることができます。


Interface Builder の構成オプション


Xcode では、ストーリーボードファイル内でインターフェイスコントローラに関する情報を構成できます。以下の表は、ストーリーボード内で構成可能な属性とその意味をまとめたものです。


属性説明
Identifier
(ID)
インターフェイスコントローラの名前。プッシュまたは表示すべきインターフェイスコントローラを指定する際に、この名前を使用します。
Title
(タイトル)
インターフェイスコントローラに割り当てられるタイトル文字列。setTitle(_:) メソッドを使用して、プログラムからこの値を設定できます。
Is Initial Controller(初期コントローラである)このオブジェクトがアプリのルートインターフェイスコントローラであるかどうかを示すブール値です。このオプションを有効にできるのは、一度に1つのインターフェイスコントローラのみです。このオプションは、Glance(グランス)や通知のインターフェイスコントローラには適用されません。
Activity Indicator On Load(ロード中の活性インジケータ)willActivate() メソッドが戻るまで、インターフェイスコントローラのコンテンツを非表示にするかどうかを示すブール値です。このオプションを有効にすると、willActivate() メソッドが戻るまで、システムは進行状況インジケータを表示します。すぐに表示可能な静的な情報がインターフェイスの大部分を占める場合は、このオプションを無効にしてもよいでしょう。
Always Bounce(常にバウンス)スクロールを無効にし、コンテンツのセーフエリアに関係なく、組み込みのコントロールやコンテナが画面の端までコンテンツを表示できるようにするブール値です。
Full Screen(フルスクリーン)SpriteKit または SceneKit のコンテンツが画面全体を使用できるかどうかを決定するブール値です。システムはステータスバーを非表示にしますが、画面の右上隅に時刻を表示し、その背後にグラデーションを配置することで、シーンに対して時刻をはっきりと視認できるようにします。
Fixed to screen edges(画面の端に固定)コンテンツがセーフエリアや最小レイアウトマージンを無視するかどうかを示すブール値です。このオプションを有効にすると、システムはスクロールを無効にし、組み込みのコントロールやコンテナが画面の端までコンテンツを表示できるようにします。
Background(背景)シーンのコンテンツの背面に表示される背景画像です。ストーリーボードで指定した画像は、インターフェイスコントローラのコンテンツと共にスクロールします。
Mode(モード)背景画像のコンテンツモードです。このモードは、背景画像をどのように拡大・縮小するか、あるいは画面全体をどのように埋めるかを定義するもので、UIView.ContentMode 型の定数と同様に動作します。
Animate(アニメーション)アニメーション付きの背景画像が、ロードの後に自動的にアニメーションを開始するかどうかを示すブール値です。アニメーションを自動的に開始させたい場合はこのオプションを Yes に設定し、プログラムから開始させたい場合は No に設定します。
Color
(カラー)
シーンのコンテンツの背面に表示される背景色。
Insets
(挿入物)
インターフェイスコントローラの端とそのコンテンツとの間に設ける余白の量(ポイント単位)。Custom を選択すると、上下左右の端それぞれに異なる値を指定できます。
Spacing
(余白)
インターフェイスコントローラ内の項目間に設ける追加の余白(ポイント単位)。


サブクラス化に関する注意事項


実行時に構成が必要なストーリーボードシーンや、ユーザー操作を処理するシーンがある場合は、WKInterfaceController をサブクラス化します。通常、あなたのアプリが管理する各ストーリーボードシーンごとにカスタムサブクラスを定義して下さい。サブクラスでは、構成が必要なインターフェイスオブジェクトのアウトレットを定義し、ストーリーボードシーンの要素の操作に応答するアクションメソッドを定義します。


アプリで使用するほとんどのカスタムインターフェイスコントローラは、カスタムインターフェイスコントローラのサブクラスを必要とします。一見でさえ、一見の内容を更新するためにインターフェイスコントローラが必要です。カスタムインターフェイスコントローラを使用できない唯一のストーリーボードシーンは、静的通知インターフェイスに関連したシーンです。動的通知インターフェイスのインターフェイスコントローラを実装する場合は、代わりに WKUserNotificationInterfaceController をサブクラス化してください。


インターフェースの構成と表示準備に必要なクラスのメソッドをオーバーライドしてください。ほとんどのインターフェースコントローラは、init() メソッドと awake(withContext:) メソッドをオーバーライドします。必要に応じて、その他のメソッドもオーバーライドしてください。





トピックス


インターフェースコントローラの作成


init()

初期化されたインターフェイスコントローラオブジェクトを返します。


func awake(withContext: Any?)

指定されたコンテキストデータを使用して、インターフェイスコントローラを初期化します。


func setTitle(String?)

インターフェースのタイトルを設定します。



アクティベーションおよび表示イベントへの応答


func willActivate()

システムがビューをアクティブにしようとしていることを、インターフェイスコントローラに通知します。


func didDeactivate()

インターフェイスコントローラに対し、そのビューがもはやアクティブではないことを通知します。


func didAppear()

インターフェイスコントローラに対し、そのビューが画面上に表示されたことを通知します。


func willDisappear()

インターフェイスコントローラに対し、そのビューが画面外になったことを通知します。



ナビゲーションインターフェースの実装


func pushController(withName: String, context: Any?)

新しいインターフェースコントローラを画面上にプッシュします。


func pop()

現在のインターフェースコントローラを画面からポップします。


func popToRootController()

アプリの初期インターフェースコントローラを除く、すべてのインターフェースコントローラをポップします。


func performSegue(forRow:)

指定された行に対してセグエを実行します。



インターフェイスコントローラをモーダルで表示する


func presentController(withName: String, context: Any?)

単一のインターフェースコントローラをモーダルで表示します。


func presentController(withNames: [String], contexts: [Any]?)

ページを基本としたインターフェイスをモーダルで表示します。


func presentController(withNamesAndContexts: [(name: String, context: AnyObject)])

ページを基本としたインターフェイスをモーダルで表示します。


func presentAlert(withTitle: String?, message: String?, preferredStyle: WKAlertControllerStyle, actions: [WKAlertAction])

現在のインターフェースコントローラ上に、アラートまたはアクションシートを表示します。


enum WKAlertControllerStyle

標準システムアラートのスタイルを示す定数。


func dismiss()

現在のインターフェースコントローラを画面から閉じます。




class func reloadRootPageControllers(withNames: [String], contexts: [Any]?, orientation: WKPageOrientation, pageIndex: Int)

指定されたインターフェイスコントローラをロードし、与えられたスクロール方向に合わせてアプリのページを基礎としたインターフェイスを再構築します。


enum WKPageOrientation

ページを基礎としたインターフェースにおけるスクロール方向。


class func reloadRootControllers(withNamesAndContexts: [(name: String, context: AnyObject)])

指定されたインターフェイスコントローラをロードし、アプリのページを基礎としたインターフェイスを再構築します。


func becomeCurrentPage()

ページを基礎としたインターフェイスで、インターフェイスコントローラーを表示します。



セグエによる画面遷移の管理


func contextForSegue(withIdentifier: String) -> Any?

ボタンがタップされたときに、指定されたインターフェイスコントローラに渡すべきコンテキストオブジェクトを返します。


func contextsForSegue(withIdentifier: String) -> [Any]?

ボタンがタップされた際に、ページを基礎としたインターフェースコントローラーのセットへ渡すべきコンテキストオブジェクトを返します。


func contextForSegue(withIdentifier: String, in: WKInterfaceTable, rowIndex: Int) -> Any?

表内の行がタップされた際に、指定されたインターフェイスコントローラに渡すべきコンテキストオブジェクトを返します。


func contextsForSegue(withIdentifier: String, in: WKInterfaceTable, rowIndex: Int) -> [Any]?

表内の行がタップされたときにページを基礎としたインターフェイスコントローラーのセットに渡すべきコンテキストオブジェクトを返します。



スクロールの管理


func scroll(to: WKInterfaceObject, at: WKInterfaceScrollPosition, animated: Bool)

指定されたオブジェクトを、画面上の与えられた位置までスクロールします。


enum WKInterfaceScrollPosition

画面上のスクロール位置。


func interfaceDidScrollToTop()

ユーザーが「トップへスクロール」するジェスチャ(ステータスバーのタップなど)を行い、スクロールのアニメーションが完了したことをインターフェースコントローラに通知します。


func interfaceOffsetDidScrollToTop()

ユーザーがインターフェースの最上部までスクロールし、スクロールのアニメーションが完了したことをインターフェースコントローラーに通知します。


func interfaceOffsetDidScrollToBottom()

ユーザーがインターフェースの最下部までスクロールし、スクロールのアニメーションが完了したことをインターフェースコントローラーに通知します。


var isTableScrollingHapticFeedbackEnabled: Bool

ユーザーが表をスクロールする際、新しい行の表示に合わせて触覚のフィードバックを行うかどうかを決定するブール値。



安全領域とレイアウトの余白を尊重する


var contentSafeAreaInsets: UIEdgeInsets

画面上でコンテンツを安全に表示できる領域を定義する挿入物。


var systemMinimumLayoutMargins: NSDirectionalEdgeInsets

テキスト要素の最小レイアウトの余白を表す、先頭および末尾の挿入物。


var contentFrame: CGRect

アプリのコンテンツを表示するために使用されるフレームの長方形。



インターフェースの変更をアニメーション化する


func animate(withDuration: TimeInterval, animations: () -> Void)

指定された期間にわたり、1 つ以上のインターフェイスオブジェクトの変更をアニメーション化します。



テキスト入力の処理


func presentTextInputController(withSuggestions: [String]?, allowedInputMode: WKTextInputMode, completion: ([Any]?) -> Void)

ユーザーからテキスト入力収集するためのモーダルインターフェースを表示します。


func presentTextInputControllerWithSuggestions(forLanguage: ((String) -> [Any]?)?, allowedInputMode: WKTextInputMode, completion: ([Any]?) -> Void)

ユーザーから言語固有のテキスト入力を収集するためのモーダルインターフェースを表示します。


func dismissTextInputController()

テキストを返さずに、テキスト入力コントローラーを閉じます。


enum WKTextInputMode

テキスト入力コントローラーによってサポートされる入力モード。



映像・音声インターフェースの表示


func presentMediaPlayerController(with: URL, options: [AnyHashable : Any]?, completion: (Bool, TimeInterval, (any Error)?) -> Void)

指定されたメディアファイルを再生するためのモーダルインターフェースを表示します。


メディアプレーヤーのオプション

メディア再生オプションを示すキー。


func dismissMediaPlayerController()

メディアインターフェースコントローラーを閉じます。


func presentAudioRecorderController(withOutputURL: URL, preset: WKAudioRecorderPreset, options: [AnyHashable : Any]?, completion: (Bool, (any Error)?) -> Void)

ユーザーの Apple Watch から音声を録音するための標準インターフェイスを表示します。


enum WKAudioRecorderPreset

音声録音の品質を示す定数。


音声録音オプション

音声を録音する際に指定すべきオプション。


func dismissAudioRecorderController()

音声録音インターフェースコントローラーを閉じます。



表の行の選択処理


func table(WKInterfaceTable, didSelectRowAt: Int)

ユーザーが表内の行を選択したことを通知するために呼び出されます。



ピッカーの管理


func pickerDidFocus(WKInterfacePicker)

指定されたピッカーが、Digital Crown からの入力を受け付けるようになったことを通知するために呼び出されます。


func pickerDidResignFocus(WKInterfacePicker)

指定されたピッカーが、Digital Crown からの入力を受け付けなくなったことを通知するために呼び出されます。


func pickerDidSettle(WKInterfacePicker)

ユーザーがピッカーで値を確定した際に呼び出されます。




@@@@@@@@@@@@@@
08/25ここまで
@@@@@@@@@@@@@@





関連


以下からの継承


WKInterfaceObject


以下に準拠


CVarArg

CustomDebugStringConvertible

CustomStringConvertible

Equatable

Hashable

NSObjectProtocol





以下も見よ


コンテナ


class WKInterfaceGroup

1 つ以上のインターフェースオブジェクトを格納するコンテナ。


class WKInterfaceSeparator

グループ内に視覚的な区切り線を表示するインターフェイスオブジェクト。


class WKInterfacePicker

ユーザーが選択できる項目のスクロールリストを表示するインターフェース要素。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ