問題タブ [nswindowcontroller]
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 - Interface Builder での NSWindowController オブジェクトのリンク
別のウィンドウでボタンをクリックして開きたい NSWindow xib ファイルを作成しました。
ここで、NSWindow の動作を制御するために、xib の Library からオブジェクトをドラッグし、XCode で定義した NSWindowController (つまり ListingWindowController) のサブクラスに変更しました。
同様に、NSWindow 内の NSView を管理するために、NSViewController のサブクラス (つまり、ListingViewController) も作成しました。これを行うために、xib の Library から NSViewController をドラッグし、そのクラスを ListingViewController に変更しました。
IBでウィンドウコントローラーのウィンドウとlistingVCを接続しました。
起動 (最初の) ウィンドウでボタンをクリックしてこのウィンドウを呼び出すには、次のように initWithWindowNibName を使用してウィンドウ コントローラーを作成します。
問題は、今後のウィンドウ/ビューのビュー コントローラーに対して IB ですべてのバインドが行われているにもかかわらず、新しいウィンドウが読み込まれた後でも、ウィンドウとリスティング VC が (null)、(null) になることです (コードの下)。
接続が機能しない理由を教えてください。私はかなり長い間、この問題に頭を悩ませています。
PS: 私は iOS プログラミングのバックグラウンドを持っています。したがって、Mac のウィンドウ/ビュー コントローラーは iOS の UIViewController と同様に動作すると想定しています。
ティア..
objective-c - NSWindow はフレームを画面より高く設定します
私は助けが必要です。垂直スライダーを備えた Adium のようなアプリがあります。しかし、私のアプリはコンテンツに応じてウィンドウの高さを変更します。画面の高さがアプリのウィンドウの高さよりも小さい場合、ウィンドウの高さが自動的に縮小されます。
ウィンドウに setFrame を使用し、window.frame.size.height を画面の高さより高く設定しようとすると、何も起こりません。
問題は、ウィンドウ フレームを画面の高さよりも高く設定する方法です。
objective-c - Mac OS X Cocoa シングル ウィンドウ アプリケーション アーキテクチャ
シングル ウィンドウ アプリケーションが Mac OS X で動作するように最適な方法でアプリケーションを設計する方法がわかりません。単一のドキュメントと単一のウィンドウ アプリケーションを使用したいと思います (ユーティリティ アプリケーションのコーディングはしていません)。ウィンドウの内容を初期化する必要があります。
iOS では、その目的のためにルート ビュー コントローラのメソッド-[UIViewController viewDidLoad]
またはメソッドを使用する必要があります。-[UIViewController viewWillAppear:]
チュートリアルのアドバイスや、NSDocument - NSDocumentController - NSWindowController - NSViewController クラスの扱い方を教えてください。
回答ありがとうございます。:-)
cocoa - 開いたときにすべての NSDocument ウィンドウを前面に表示
ほとんどのシステムでは、「新しいウィンドウを開く」のデフォルトの動作は、前面に表示されることです。これは Cocoa では発生しません。私は、この標準的な動作を行うための「正しい」方法を見つけようとしています。私が試したほとんどのことは、最大1 つのウィンドウでしか機能しません。
起動時に複数のウィンドウを開く必要があります。
- (N x NSDocuments (それぞれ 1 つのウィンドウ)
- NIB ファイルを開くシンプルな NSWindowController x 1。
機能しないもの:
- 開きたいすべての NSDocuments を繰り返し処理し、それらを開きます。
何が起こるのですか?... open を呼び出す「最後の」ものだけが前面に表示されます。残りは、すばやく切り替えるか、[ウィンドウ] メニューを使用してそれらを見つけるまで、非表示になり、画面のどこにも表示されません。
コード:
- ウィンドウを開いた後、各ウィンドウで「makeKeyAndOrderFront」を手動で呼び出す
何が起こるのですか?違いはありません。しかし、NSWindow インスタンスを取得するために私が見つけた唯一の方法は、非常にハックであり、完全に間違っているようです (ただし、いくつかのブログやメーリング リストの投稿で言及されています)。
コード:
...私はこれが間違っていることを知っていますが、なぜ/何を別の方法で行うべきかわかりません:(。
通常は機能しますが、常に機能するとは限りません。
- 上記と同じですが、代わりに「showWindow」を使用してください (これは NSDocument ガイドから取得しました)。
奇妙なことに、Apple が内部的に呼び出していると主張している正確なコードであるにもかかわらず、これは時々機能します。彼らが内部的に呼び出している場合、既に呼び出した後に再度呼び出すと、なぜ異なる動作をするのでしょうか?
cocoa - -[NSWindowController ウィンドウ] NSWindowController がウィンドウで初期化されたときにウィンドウを保持しますか?
アプリケーション (OS X 10.6.7) には、次のようにNSWindowController
初期化されるサブクラスがあり-[NSWindowController initWithWindow:]
ます。つまり、既にコードでウィンドウを作成しています。ペン先からロードしていません。
通常、NSWindowController
サブクラスのウィンドウは で参照します[self window]
。しかし、この場合、送信するたびに[self window]
ウィンドウが保持されるため、かなりのリークが発生します。
これは意図した動作ですか? 今のところ、ウィンドウをinit
メソッドのインスタンス変数に格納し、決して送信しないことで回避しました[self window]
。
NSWindowController
がウィンドウをロードしようとしているため、これが発生していないと確信しています:-loadWindow
ウィンドウを保持せず、次を-isWindowLoaded
返しますYES
:
objective-c - ウィンドウが閉じられたときに NSWindowController を解放する
Cocoa アプリケーションを作成していますが、ウィンドウ コントローラの使用について質問があります。ユーザーがメニュー バーから [新規] を選択すると、NSWindowController のサブクラスである MyWindowController のインスタンスが作成され、MyWindow.xib から新しいウィンドウが表示されるという考え方です。
アプリケーションデリゲートでアクションを処理しています。私が見たところ、次のようなことができるかもしれません。ウィンドウが表示されると、ウィンドウコントローラーへのポインターを保存する理由がなくなり、ポインターを割り当てたので、ウィンドウを表示する前に自動解放します。
その後すぐにウィンドウが解放されるため、ウィンドウは画面に短時間表示されてから消えます。-showWindow: メソッドでウィンドウ コントローラーを保持し、windowWillClose 通知を受け取ったら解放するという解決策を見つけました。
これを行うより良い方法はありますか?Apple のドキュメントを検索しましたが、どのプラクティスを使用すべきかについては何も見つかりませんでした。それはカバーすべき非常に基本的なもののように聞こえるので、間違った用語で検索しているだけかもしれません.
objective-c - ロードされたビューでコントロールを選択する
NSViewControllerの使用とビューの切り替えについて質問があります。私は窓のあるCocoaアプリケーションを持っています。ウィンドウの考え方は、各ビューが個別のXIBファイルに保存されている複数のビューを1つずつ表示することです。各ビューには、対応するNSViewControllerがあります。最初のビューのみがロードされる場合に行っていることの最小限の例を作成しました。
ウィンドウがロードされると、FirstView.xibからのビューもロードされ、ビューがウィンドウに表示されます。この場合、ロードされたビューにはテキストフィールドしかなく、ユーザーがクリックしなくても入力を直接書き込むことができるようにテキストフィールドを強調表示したいのですが、その方法がわかりません。ビューの読み込み時にテキストフィールドを選択することはできますか?
ドキュメントを読んだ後、おそらくウィンドウのinitialFirstResponderをテキストフィールドに設定したいことがわかりましたが、テキストフィールドがウィンドウとは異なるXIBファイルにある場合はその方法がわかりません。
cocoa - cocoaリリースnswindowcontroller
ウィンドウnibファイルからコントローラーを含むウィンドウをロードしています。ウィンドウの「閉じたときに解放する」オプションが有効になっています。ウィンドウが閉じたらすぐにコントローラーを解放するにはどうすればよいですか?
ありがとうございました
objective-c - ビューの交換 - NSWindowController と NSViewController(s)
私は Mac OS プログラミングの初心者です。現時点では、上部にツールバーがあり、下部に適切なビューがある 1 つのウィンドウを持つ単純な測定アプリケーションを作成しようとしています。ツールバーの ボタンをクリックすると、その下のビューが切り替わります。たとえば、[接続] ボタンをクリックすると接続設定が表示され、[測定] にはデバイスからの現在のデータが表示されます。
問題は - ビューのスワッピングの処理方法がわからない、つまり、私が知っているが正確ではないことです...ここで同様の議論を見つけました: NSViewController and multiple subviews from a Nib but there is no answer to create how to create NSWindowControllerとそれをメイン ウィンドウに割り当てる方法。ビューを交換できるようにするには、 NSWindowController を作成する必要があると思います。私が間違っている場合は、私を修正してください。
だから私は新しいプロジェクト(ここではSampleと呼ばれる)を作成しています.SampleAppDelegate.hファイルは次のようになります:
(私が思うに) MainMenu.xib から作成された唯一のウィンドウを保持するウィンドウ ivar があります。
では、SampleAppDelegate からウィンドウの NSWindowController を作成するにはどうすればよいでしょうか?
WindowController サブクラスを作成し、関数で (void)applicationDidFinishLaunching:(NSNotification *)aNotification of the SampleAppDelegate を次のように作成する必要があります。
ヒントや助けにとても感謝しています。
マルシン
objective-c - NSDocument ウィンドウ コントローラーとアウトレットのインスタンス化
ドキュメント ウィンドウ コントローラのインスタンスに奇妙な問題があるようです。makeWindowControllers
NSDocument メイン クラスのオーバーライドされたメソッドから開始されたカスタム ウィンドウ コントローラーを使用したドキュメント ベースのアプリケーションがあります。
メイン アプリケーション ウィンドウには、ファイル オーナー (上記のウィンドウ コントローラー) に対応するアウトレットを持つ NSTextView オブジェクトが含まれています。メニュー項目を介して呼び出されるアクションがあり、テキスト ビュー textStorage オブジェクトのコンテンツを設定する必要があります。
現在、アクションは送信者がウィンドウ内のボタンなどの場合は期待どおりに機能しますが、送信者がメニュー項目の場合は機能しません。インスタンス化の問題であると予想していますが、不可解なのは、アクションで次の行を提供することです。
送信者 (インターフェイス ボタンまたはメニュー項目) に応じて、2 つの異なるウィンドウ コントローラー インスタンス ID を返します。あるケース (メニュー項目) では、NSLog は次のように吐き出します。
それ以外の場合 (ボタン):
私は何を間違っていますか?