モーダルビューを開いたときに左上隅に表示される「キャンセル」というラベルを変更する方法...画像付きのボタンにしたいと思います。
4 に答える
ラベルCancel
は、モーダルに表示される WKInterfaceController のデフォルトの「タイトル」で、Apple Watch のステータス バーに表示されます。
タイトルを画像に置き換える
このリンクの一部として、またはこのリンクを置き換えるために、ステータス バーを非表示にしたり、ステータス バーに画像を表示したりすることはできません。
モーダル ビューのタイトルを設定するオプション
ただし、タイトルを新しい文字列値に設定することはできます。たとえば、 に置き換えたいと思うかもしれませCancel
んClose
。このタイトルを設定するには、次の 4 つの方法があります。ほとんどの場合、オプション 1 のみが受け入れられる可能性が高いため、下部の注を必ずお読みください。
Interface Builder で、モーダルに表示される WKInterfaceController のタイトルを設定できます。属性インスペクタで Title 属性を設定するだけです。もちろん、各 WKInterfaceController に対してこの方法で設定できる静的タイトルは 1 つだけですが、上記のメカニズムのいずれかを使用して実行時に動的に変更することもできます。
モーダルに表示される WKInterfaceController の init メソッドでタイトルを設定できます。
override init () { super.init () self.setTitle("Close") }
モーダルに表示される WKInterfaceController の awakeWithContext メソッドでタイトルを直接設定できます。
override func awakeWithContext(context: AnyObject?) { super.awakeWithContext(context) self.setTitle("Close") }
コンテキスト変数を使用して、モーダルに表示される WKInterfaceController にタイトルを渡すことができます。インターフェイス ビルダー
identifier
で、コントローラーの属性インスペクターでモーダルに表示されるように設定します。(この例では、「modalController」に設定されています。) 次に、目的のタイトルを Context として渡すことで、コントローラーを提示します。self.presentControllerWithName("modalController", context: "Close")
次に、モーダルに提示されたコントローラーで:
override func awakeWithContext(context: AnyObject?) { super.awakeWithContext(context) self.setTitle(context as? String) }
ノート:
WatchKit の現在の「意図された動作」は、ほぼ確実に、ほとんどのユース ケースで最初のオプションのみが許容されることを意味します。これは、現在、他の 3 つのオプションでは、最初にビューの読み込み時にデフォルトのタイトルが表示され、その後 setTitle を使用して設定したテキストに置き換えられるためです。awakeWithContext は、ビューがロードされた後に設計上実行されますが、init で setTitle を使用しても、デフォルトのタイトルの初期表示は回避されません。
上記の最初のオプションはCancel
、ビューの新しいデフォルト タイトルに置き換えられます。Interface builder のカスタム タイトルを以下のオプション 2 ~ 4 のいずれかと組み合わせると、setTitle
最初のタイトルが異なるだけで、まったく同じ症状 (最初のタイトルが に置き換えられる) が表示されます。
WatchKit プログラミング ガイドの「Presenting Interface Controllers Modally」セクションを見たところ、次のように書かれていました。
モーダル インターフェイスの左上隅には、インターフェイス コントローラーのタイトル文字列が表示されます。ユーザーがその文字列をタップすると、WatchKit はモーダル インターフェイスを閉じます。モーダル インターフェイスを閉じる意味を反映するようにタイトル文字列を設定します。たとえば、情報を表示する場合、文字列を Done または Close に設定できます。インターフェイス コントローラのタイトルを指定しない場合、WatchKit はデフォルトで文字列 Cancel を表示します。
そして、その「キャンセル」ビットについては、 WKInterfaceController のドキュメントpresentControllerWithName:context:
:
モーダル インターフェイスのタイトルは、提示されたインターフェイス コントローラーが
setTitle:
メソッドを使用して明示的に変更しない限り、文字列 Cancel に設定されます。
この時点での唯一の選択肢は、画像ではなく別の文字列であることを示しているようです。
限定的ではありますが、タイトルに画像を挿入する有効な方法は、絵文字を使用することです。Xcode 7.1 の時点で、シミュレーターにはバグがあり、間違った文字が表示されるようですが、デバイス上では完全に正常に動作します。
setTitle("Hello world! ")