0

メニューバーアプリケーションとウィンドウアプリケーションの2種類のインターフェイスを持つアプリケーションがあります。ただし、両方の状態で同時に存在することはできません。

ユーザーが状態を変更できるボタンをクリックできるようにするにはどうすればよいですか?

たとえば、私のアプリケーションが現在ウィンドウである場合、ユーザーがボタンをクリックすると、それをメニューバーアプリケーションに変更すると、ウィンドウが消えます。ただし、ユーザーがもう一度クリックすると、すべてのメニューバー情報が消え、ウィンドウが再び表示されます。

アプリケーションは非常にシステムが重いため、メニューバーバージョンとウィンドウバージョンを同時に動作させる余裕はありません。

どうすればこれを達成できますか?

私はOSXMountainLionに取り組んでおり、Objective-C/Cのソリューションが必要です。

4

2 に答える 2

1

ただし、両方の状態で同時に存在することはできません。

なぜだめですか?アプリがユーザーにどのように表示されるかを分離する別のアプローチを検討することをお勧めします。このようにして、システムの負荷の高いコードがコントローラーで 1 回だけ実行され、ウィンドウとステータス バー項目の両方で操作の進行状況や結果、または表示したいものを視覚化できます。

通常は、ステータス バー項目を使用してウィンドウの表示を切り替えたり、メニューを表示してメイン ウィンドウを制御したりします。ただし、アプリのさまざまな状態 (通知の種類) を小さな色のバリエーション (黒と白を推奨) やさまざまな画像で表示したり、メイン ウィンドウが非表示のときにウィンドウ インターフェイスの簡略化されたバージョンでポップオーバーを表示したりするために使用できます。 .

ユーザーがウィンドウを閉じたり表示したりしても、メインのアプリ操作に影響を与える必要はありません。進行状況/結果の特定のビューを非表示にするだけです。特定のボタンまたはメニュー項目を追加して、操作を一時停止/停止/開始します。

于 2012-09-17T11:40:19.993 に答える
1

NSWindowUI を で表示し、で個別に表示する方法を知っていると仮定すると、次の方法でNSStatusItem1 つの UI から別の UI に「切り替える」ことができます。

  1. を非表示NSWindowにして表示するNSStatusItem; また

  2. を非表示にしてNSStatusItemを表示しNSWindowます。

NSWindowを使用して非表示にすることができ-(void)orderOut:、 を使用して可視性を復元できます-(void)orderFront:

NSStatusItemについては、必要に応じて作成 (参照: –statusItemWithLength:) および削除(参照: ) できます– removeStatusItem:

編集:

内の UI 要素で何かを行う必要がある場合は、NSWindowそれらを反復することでそれを行うことができます。

for(NSView* view in [[window contentView] subviews])
{
   [view ...];
}

コンテンツが NSControls で構成されている場合NSWindowは、次のように無効にすることができます。

for(NSView* currentView in [[window contentView] subviews]) {

    if( [currentView respondsToSelector:@selector(setEnabled:)] )
    {
        [(NSControl*)currentView setEnabled:NO];
    }
}

コントロールの階層が複雑な場合は、メソッドを作成して再帰的に呼び出すことができます。

于 2012-09-16T18:42:13.770 に答える