問題タブ [nsviewcontroller]
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 - NSViewにrightMouseDown:をサブクラス化せずに次のレスポンダーに渡すことは可能ですか?
いくつかのサブビューを含むビューがあります。
mainView
NSView
ペン先から構築され、サブクラスで制御されますNSViewController
。NSTextField
サブビューは、やなどの標準ビューでありNSImageView
、編集できないように構成されています。いずれかのサブビューでイベントがトリガーされた場合でもmainView
受信したい。rightMouseDown:
rightMouseDown:
inのデフォルトの実装はNSResponder
、イベントを次のレスポンダーにNSView
渡しますが、デフォルトの動作を変更し、次のレスポンダーに渡しません。
すべてのサブビューをサブクラス化することはできますが、これは非常にエレガントで保守可能なソリューションのようには思えません。
rightMouseDown:
すべてのサブビューをサブクラス化せずに、サブビューを取得して次のレスポンダーにメッセージを渡すにはどうすればよいですか?
cocoa - 別の nib から NSView を追加する
新しいビューが別の xib ファイルにある場合、サブビューを追加するにはどうすればよいですか?
別のペン先のクラスは NSViewController でありself = [super initWithNibName:@"NewView" bundle:nil];
、ペン先をロードするために使用しています
次のようなことができますか:
それとも何か違うことをしなければなりませんか
cocoa - NSView がスーパービューから削除されない
NSViewController からの NSView (view1 と呼びます) があります。スーパー ビュー (view2 と呼びます) は NSWindowController 内にあります。問題は、view1 を view2 に追加できますが、削除できないことです。
objective-c - Cocoaアプリケーションでビューを切り替えるにはどうすればよいですか?
だから私はココアの使い方を学び始めています。私はほとんどそれを持っていると思いますが、ビューの作成と切り替えに夢中になっています。少し前に作ったゲームを練習用に書き直しています。必要なのは1つのウィンドウ(できればサイズ変更不可)だけで、ゲーム内のさまざまな画面のビューを切り替えられるようにしたいです。
まず、メインメニュー(ゲームの開始、ハイスコア、終了)があります。次に、各画面(ゲームプレイ画面、ハイスコア画面)用のウィンドウが必要です。
私が混乱しているのは、これをどのように設計するかです。ビューを管理していると思ってNSViewControllerを調べましたが、そうではありません。実際にロードすることで、1つのビューのみを管理します。なぜNSViewControllerを使用する必要があるのかわかりません。NSViewの複数のサブクラスを含むウィンドウクラスを作成して、そのようにロードすることはできませんか?ViewControllerの目的がわかりません。
私のウィンドウクラスは本当にNSWindowControllerをサブクラス化する必要がありますか?私はAppleのViewControllerの例に従おうとしていましたが、NSWindowControllerのサブクラスであるウィンドウコントローラークラスがあります。それをサブクラス化する目的が何だったのかわかりません。NSWindowControllerはすべて追加されているよう- initWithPath:(NSString *)newPath
に見えますが、起動時にplistファイルを編集してウィンドウを開くことができる場合でも、その使用法はわかりません。Appleの例には、NSView変数とNSViewController変数もあります。現在のビューを格納するために必要な変数は1つだけではありませんか?
事前のおかげで、私はこれがどのように機能するかについて本当に混乱しています。
objective-c - ビューのコンテンツが初期化された方法に依存する NSViewController を持つ方法は?
これは実際には 2 つの部分からなる質問です。私の説明が明確であることを願っています。
ビューの一部に別のカスタム ビューを表示するように構成できる NSViewController があります。たとえば、そのビューは CustomViewA または CustomViewB のいずれかを表示できます。
カスタム ビューごとに NSViewController を作成し、CustomViewA を処理する NSViewController または CustomViewB を処理する NSViewController で MyViewController を初期化することで、これを機能させることができました。NSBox を使用し、その contentView を、指定された NSViewController によって提供されるビューに設定します。
このアプローチの問題は、contentView が「MyView」を保持する NSBox があり、「MyView」内に CustomViewA または CustomViewB を保持する別の NSBox があることです。
もう 1 つの問題は、MyViewController で CustomViewA と CustomViewB の両方を処理することであり、それぞれに個別の NSViewController を用意するのではありません。
これが私の現在のソリューションのサンプルコードです:
CustomViewA と CustomViewB を MyView.nib 内に配置し、両方とも MyViewController をコントローラーとして使用するにはどうすればよいですか?
メイン ビューに NSBox ではなく MyView を保持させるにはどうすればよいですか?
前もって感謝します!
cocoa - ネストされた NSView のサイズ変更
多種多様な独自のビューを分類するために、私は精巧な設定をしています。主なカテゴリはツールバーから選択され、特定のペインはカテゴリの NSScrollView で選択されます。これは次のようになります: ウィンドウ -> 5 つのビューを制御する NSViewController -> X ビューを制御する各ビューのサブ NSViewController -> 各ビューにはコアプロット グラフが含まれます。つまり、ほぼすべてのパスの最後にコア プロット CPLayerHostingView を持つネストされた NSViewControllers です。
私の質問に入る前に、これが不十分な実装であることを遠慮なく指摘してください。使いやすさの点では、それは理にかなっていると思いますが、ネストされたオブジェクトの数が非常に多いため、もっと良い方法があるのではないかと思います。
さて、私が可能な限り最善の方法で設計したと仮定すると、質問自体: カテゴリを選択し、その中のサブアイテムを選択し、レンダリングされたグラフを見ているとします。ウィンドウのサイズが変更された場合、グラフのサイズが適切に変更されることを望みます。Interface Builder では、これを実現するために必要なすべてのことを行いました。メイン ウィンドウの CPLayerHostingView から NSView までのすべてが、全方向に自動サイズ設定されるように設定されています。それにもかかわらず、実行時にサイズを変更すると、グラフは静止したままになり、サイズ変更も移動もしません。ゼロまたは 1 つの NSView 層を持つ設計では、デバッグがはるかに簡単になりますが、このシナリオではアイデアがありません。
プログラムまたはIBベースのどのトリックを使用して、ウィンドウのサイズ変更に応じてNSViewのサイズを確実に変更できますか?
objective-c - NSViewController からのデリゲートとしての QuickLook コンシューマ
QuickLook
のテーブルから機能を実装する際に問題が発生していますNSView
。に関する限られたドキュメントは、QuickLook
実際にはまったく役に立ちません。
Apple Docs (カスタム ジェネレーターとプラグインに重点を置いています) を読んだ後、 QuickLookDownloader サンプル コードを調べました。このコードはドキュメントベースのアプリケーションに基づいていますが、私にとっては正しい方法のようです (結局のところ、これは Apple のコードであり、彼らのプロジェクトで機能します)。
私の実装では、 がQuickLook panel
問題なく表示され、同じように簡単に閉じることができます。ただし、パネル自体が my 内からデリゲート メソッドを呼び出すことはありませんNSViewController
。その結果、「アイテムが選択されていません」という文言だけで、オブジェクトを表示することさえできません。そして、私は困惑しています。
に電話してみsetDelegate
ましたが、そのルートを進むと差し迫った破滅について警告されます...
[QL] QLError(): - [QLPreviewPanel setDelegate:] が呼び出されたときに、パネルにコントローラーがありません - これを修正しないと、すぐに発生します。-acceptsPreviewPanelControl:/-beginPreviewPanelControl:/-endPreviewPanelControl: については、QLPreviewPanel.h のコメントを参照してください。
そして、いずれにせよ、デリゲート メソッドの 1 つに応答しようとすると、dealloc で破滅が起こります。
はい、パネルを獲得した後にデリゲートを設定する必要があることを確認するヘッダーを読みました(以下のコードを参照)。
これはサンプル コードとほぼ一致しますが、例外として、a) データを取得する場所 (からデータを取得するNSArrayController
) と、b) プレビュー アイテムを取得する場所 (私のモデル オブジェクトから直接取得する場所) が異なります。 - またはとにかくする必要があります)
問題は、acceptsPreviewPanelControl
が呼び出されないため、デリゲートが使用されないことです (絶対に呼び出されません)。
これは私が見逃している単純なステップだと確信していますが、サンプル コードを分析し、ドキュメントを精査した後、答えがわかりません。
これはすべて NSViewController 内からのものであるためですか (ただし、それが方程式に含まれる理由はわかりません)。
ありとあらゆる助けが大歓迎です。
ソリューションの更新
Peter の観察のおかげで、修正は迅速に行われました。デバッガーのエラー メッセージが意味することを嫌いませんか? :-)
ロードされた私のクラスでMyViewController
は、問題を修正するために 3 行のコードを追加するだけで済みました。
仕事は終わりました :-) ピーターに感謝します。
cocoa - NIB からの NSView のロードが機能しない
NIB から NSView をロードし、それを別の NSView に追加するこのコードがあります。
すべてのコンセントが正しく接続されていますが、何も表示されません。理由がわかりません!誰かが私を助けることができますか?ありがとう。
これは、UIView ではなく NSView に関するものです。
cocoa - NSView の概要
カスタム ビューを作成してウィンドウにロードしようとしています。
最後に、私が見逃している重要な関係を反映して、従うべきいくつかのステップがあることを知っています. 一連の手順で、ビュー オブジェクト、ビュー コントローラー、関連付けられた .xib を作成し、それを (現在のビューをクリアした後) ウィンドウに読み込む方法を誰かが説明してくれることを願っています。
そして、どこで宣言して初期化するか、何をインポートする必要があるかなど、すべての本質的なことを意味します。私は持っているすべての本に目を通していますが、それは私のちっぽけな脳にははっきりしていません.
ありがとう!
objective-c - Cocoa NSPopupButton の問題
私の Cocoa アプリケーションでは、1 つのビューで、Interface ビルダーを介して NSPopupButton を追加し、それに応じてソース ファイルとリンクしました。コードで、メニューを動的に作成し、NSPopupbutton でメニューを追加しています。これは WindowDidLoad で実行したものです。以下のコードを参照してください
アプリケーションを実行すると、最初はボタンが有効になっていますが、メニューとボタンを含む矢印をクリックすると無効になります
私が間違っていることを教えてください。