問題タブ [cocoa-sheet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - mutilDocument 環境で Quit 関数を無効にする方法は?
私は mutilDocument App を持っています。メソッドでウィンドウを開くと、次のことがわかりました。
mainmeny の Quit 関数は既に強調表示されています。これにより、Quit app 関数がこの環境下で機能する可能性があることをユーザーが混乱させる可能性があります。その下の Quit 関数を無効にしたいのですが、どうすればよいですか? どうもありがとうございました!
cocoa - シートの戻り値を使用して、ウィンドウを閉じるかどうかを決定するにはどうすればよいですか?
NSWindowController サブクラスで使用windowShouldClose:
して、[保存]、[キャンセル]、および [保存しない] ボタンで閉じる前に、ユーザーが変更を保存するかどうかを尋ねるシートをポップアップ表示したいと考えています。
私が直面している問題beginSheetModalForWindow:...
は、戻り値の代わりにデリゲートを使用することです。
で NO を返すことができますが、パネルのデリゲートでコントローラーwindowShouldClose:
に送信しても何も起こりません。[self close]
誰かがこれを行う方法を説明したり、サンプルコードの方向性を教えてくれませんか?
objective-c - NSPanel をシートとして表示する方法
NSPanel をシートとして表示しようとしています。私は素朴にそれらの線に沿って何かをしています:
私を逃れる何らかの理由で、これは機能していません。コードのこの部分が呼び出されると、(autorelease
メッセージのため) シートが一瞬点滅します。シートが窓に引っかかることはありません。
誰かが私がより多くの情報を見つけることができる場所を教えてくれるなら、それは非常にありがたいです.
objective-c - Cocoa:スレッドの結果を処理し、複数のシートをキューに入れる
一度に多くの並行操作が実行されるマルチスレッドアプリケーションがあります。各スレッドが終了すると、メインスレッドの2つのメソッドのいずれかが呼び出されます
操作が失敗した場合、エラーメッセージを表示するシートを起動し、「キャンセル」と「再試行」の2つのボタンをユーザーに表示します。シートを起動するために使用するコードは次のとおりです。
問題は、2つの同時操作が同時に失敗した場合、表示されている現在のシートが最後の失敗メッセージで上書きされ、ユーザーの「再試行」アクションは最後に失敗した操作のみを再試行することです。理想的には、これらの失敗シートを「キューに入れ」たいと思います。2つの操作が同時に失敗した場合は、2つのシートが次々に表示され、ユーザーがそれらを個別にキャンセルまたは再試行できるようになります。
私は使用してみました:
これは私が望むことをしているように見えますが、私の状況では機能しません。多分それはスレッドセーフではありませんか?
たとえば、次のコードは機能します...
ただし、2つの異なるスレッド操作が完了したときにdisplaySheet(メインスレッド上)を呼び出す場合、1つのシートしか表示されず、それを閉じると、モーダルセッションはまだ実行されており、アプリは基本的にスタックしています。
私が間違っていることについて何か提案はありますか?
cocoa - Cocoa:NSApp beginSheetはアプリケーションデリゲートを設定しますか?
アプリケーションでカスタムシートを表示しようとしていますが、何か問題があると思います。すべてがうまく機能しているように見えますが、私にはかなり奇妙な副作用があります。(理解するのに何時間もかかりました)。アプリケーションでシートを表示するたびに、アプリケーションデリゲートがシートのインスタンスに設定されるため、コントローラーがデリゲートとして設定解除され、あらゆる種類の問題が発生することがわかりました。
FailureSheet.xibというNIBファイルを作成しました。インターフェイスをIBにレイアウトし、ファイルの所有者に設定した「FailureSheet.m」という「NSWindowController」のサブクラスを作成しました。これが私のFailureSheetクラスです。
ここでは複雑なことは何も起こっていません。これが、「Controller」クラスにFailureSheetを表示する方法です。
シートを表示する前に[NSAppデリゲート]をログに記録すると、正しいのは<Controller-0x012345>です。次に、このコードを実行してシートがアップした後、再度ログに記録すると、<FailureSheet-0xABCDEF>になります。
私がここで何を間違っているのかわからない-何かアイデアはありますか?
multithreading - シートとスレッドのメモリの問題
最近、処理後に事前計算された Grafix/Audio をファイルにエクスポートできるプロジェクトを開始しました。
私が行っていたのは、メインの xib に新しいウィンドウ (progressindicator と Abort ボタンを使用) を配置し、次のコードを使用して開いたことだけです。
実際に作業を実行し、すべての targas/wave ファイルを保存するために、バックグラウンド スレッド (pthread) が以前に開始されました。これはうまく機能しましたが、しばらくすると、メインスレッドが応答しなくなり、メモリフットプリントが止められないほど増加したことが判明しました。Instrumentsでデバッグしようとしましたが、多くのCFHashなどが無限に成長しているのを見ました。
偶然、シートの下をクリックして一時的に助けました。
私には説明できません。まず、私のスレッドからプログレスバーへのアクセスがプログレスを更新するためだと思ったので(0.5秒間隔で)、それを切り取りました。しかし、何も更新せず、プログレスバーで何もしなかったとしても、「メインイベント」またはその他のものを解放しないため、アプリケーションはすべてのメモリを使い果たします。
このメインスレッドのメモリを「排出」する可能性はありますか (Runloop / NSApp 呼び出し?)。そして、なぜメインスレッドがもう応答しないのですか (この単純なタスクの後) ???
私はもうクロウを持っていません、助けてください!
前もって感謝します !
PS「スレッド化された長いタスク」をどのように実装し、GUIを更新していますか???
cocoa - シート表示時に使用できるメインメニュー
マウスでクリックされた、またはキーボードで呼び出されたメニュー項目にどのように反応しますか。例:CMD + Q?
objective-c - Cocoaが透明なシートに追加する「ぼやけた」効果を取り除くにはどうすればよいですか?
デフォルトでは、Cocoaは、透明および半透明のモーダルシートをウィンドウに適用すると、背景のぼかし効果を追加します。ぼかし効果を無効にしたいのですが。どうすればいいですか?
カスタムシート(透明な背景といくつかのコントロールを含むNSWindowのサブクラス)を作成しました。次のような標準的なbeginSheet
方法で表示できます。
シートはきれいに表示されますが、背後のすべてがぼやけています。
注1:タッチスクリーン/キオスクタイプのアプリ用に完全にカスタマイズされたユーザーインターフェイスを作成しているため、通常のAppleユーザーインターフェイスガイドラインは適用されません。
注2:シートの下にあるものを見たいのですが。SirRattyが指摘したように、背景を塗りつぶすことでぼやけた部分をブロックすることができます。私の場合、ぼやけて見えることなく、背景が透けて見えるようにしたいです。
cocoa - NSWindowController の理解の明確化
私はプロジェクトで NSWindowController を数回使用しており、この重要なクラスの背後にある概念を (非常に) 大まかに把握しているように感じます。この投稿で私がやりたいことは、私自身の理解を明確化/修正し、うまくいけば他の学習者が理解への第一歩を踏み出すのを助けることです. これは、概念、概要、およびベスト プラクティスの概要であり、最も有用であり、ドキュメントに欠けていることがよくあります。これが NSWindowController に対する私の見解です (質問は太字で散りばめられています):
- NSWindowController (NSWC) サブクラスは、(概念的には) すべてのウィンドウ nib のすぐ下に存在し、ユーザー インターフェイス要素とそれらが制御/表すモデル オブジェクトとの間の接着剤として機能します。基本的に、アプリケーション内のすべてのウィンドウには、独自の NSWC サブクラスが必要です。
- nib のファイルの所有者は、常に NSWC サブクラスである必要があります。これは、MainMenu.xib アプリケーションにも当てはまりますか?
- NSWC
window
プロパティは、常に InterfaceBuilder の NSWindow にリンクする必要があります。 - を使用して「init」メソッドをオーバーライドする必要があります
[super initWithWindowNibName:]
。これにより、参照時に[mycontroller window]
nib がロードされます。これは起動時に開かれますが、MainMenu.xib ウィンドウの NSWC にも当てはまりますか? - NSWC は重労働を行うべきではありません。単純にメッセージをオブジェクトのインスタンスに渡し、それらのオブジェクトを UI に表示する必要があります。
- バインディングを使用したり、テーブルなどのデリゲートとして機能したり、変更を観察したときに UI 要素を積極的に変更したり、上記のいずれかの組み合わせを使用して UI を変更したりできます (どちらを使用するかは問題と思われます)。味、すべての側面に長所と短所があります)。
- NSWC は、必要に応じて他の NSWC のインスタンスを作成できます (たとえば、1 回限りのサブウィンドウを開く場合)。
/li>[mycontroller showWindow:nil]
関連するウィンドウを前面に表示するには、 を使用します。ウィンドウをシートとして表示する場合は、次のようなものを使用します。
は親ウィンドウの NSWCのdidEndSelector:
メソッドである必要があり、 で「mycontroller」にアクセスして解放できます[sheet windowController]
。- ウィンドウを閉じるにはperformClose:
、NSWC のウィンドウのメソッドを呼び出します。
いくつかの質問:
- MainMenu ウィンドウの NSWC もアプリケーション デリゲートにする必要がありますか、それとも別のクラスにする必要がありますか?
- 同じように、メインの NSWC がファイルを処理 (ドラッグ/ドロップして開く) する必要がありますか、それともアプリのデリゲートに渡す必要がありますか?それとも好みの問題ですか?
これのいずれかが悪い習慣であるか、単に間違っている場合は修正してください。NSWindowController についての理解を深めたいと考えているため、(ベスト プラクティス、経験、落とし穴の形で) 追加情報をいただければ幸いです。
ありがとう、ローリー