7

現在、macOS アプリケーションに NSTouchBar API を実装しています。

現時点では、私が持っている唯一のタッチ バーにはメインの View Controller がデリゲートとしてあり、項目をうまく追加できます。問題は、特定の条件が満たされた場合 (テーブルで行が選択された場合) にのみ、これらの項目の一部が表示されるようにする必要があることです。

ボタンを表示するかどうかを示すブール値があるとします。ブール値が変更された場合に、このボタンを表示/非表示にするために NSTouchBar をオンザフライで更新するにはどうすればよいですか? (このブール値を観察する必要はありません。既に実装した別のメソッドで update を呼び出すだけで済みます)

今のところ私がやったことは次のとおりです: ではtouchBar(:makeItemForIdentifier)、すべての識別子のスイッチがあり、適切な の下で、ボタンで をcase返すか、ブール値が である場合は.NSCustomTouchBarItemnilfalse

makeTouchBarテーブルの行が選択された後にもう一度呼び出してみましたが、ボタンの可視性は更新されませんtouchBar(:makeItemForIdentifier)

ありがとう!

4

2 に答える 2

10

4 つのアイデア:

  1. タッチバーをdefaultItemIdentifiers、表示されるアイテム識別子のセットに変更してみてください。ユーザーがタッチバーをカスタマイズしている場合、これは問題になることに注意してください。これには、 で nil を返す必要がないという利点もありますtouchBar(:makeItemForIdentifier:)
  2. を呼び出すmakeTouchBar()と、新しいNSTouchBarインスタンスが作成されますが、touchBarプロパティは変更されません。次のようなものを試してください

    viewController.touchBar = viewController.makeTouchBar()
    

    また

    viewController.touchBar = nil
    
    1. 選択したときに追加のアイテムを表示するtouchBarプロパティを に設定し、に が含まれていることを確認してください。タッチ バーのコンテンツはレスポンダー チェーンのすべての要素で構成されるため、これにはテーブル行のプロパティが含まれる場合があります (ファーストレスポンダーになることができる場合)。NSTableRowViewotherItemsProxydefaultItemIdentifierstouchBar

    2. 行が選択されていない場合、これらの項目を非表示にする必要がありますか? 代わりに、それらを無効にすることを検討してください (たとえばenabled、ボタンに含まれるボタンのプロパティを に設定するなどfalse)。

于 2016-11-23T09:11:11.093 に答える
8

ビューコントローラーでタッチバーを無効にするだけです:

self.touchbar = nil

デリゲート メソッドmakeTouchBar()が自動的に呼び出されます。フラグを使用すると、表示するアイコンを簡単に選択できます。

編集: このソリューションはテスト済みで、正常に動作します。

于 2016-11-28T08:16:12.487 に答える