問題タブ [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 - MacOSX上のCocoaアプリケーションアーキテクチャ
長い間iPhoneの仕事をしていたので、MacでのCocoa開発に戻ってきました。MacでのCocoaでの私の以前の経験は、ちょっとした小さなツールでした。何か真面目なものを作りたいと思っています。
iPhoto(またはMailまたはThingsなど)のような最新のCocoaアプリケーションを見ると、多くのアプリはシングルウィンドウ、ソースリストベースのアプローチを使用しています。それは良い経験を提供するように思われるので、私はできる限りその周りに頭を包み込もうとしています。しかし、私は少し問題を抱えています。これが私がどのように見えるべきだと思うかですが、私は他の人がそれをどのようにやっているのか、そして本当に最良の方法は何であるか疑問に思っています:
アプリの開始点はAppDelegateオブジェクトであり、起動後、ペン先からWindow [Controller?]を作成し、そのデータをセットアップします(たとえば、CoreDataから)
WindowControllerは、基本的にNSSplitViewを含むウィンドウをロードします。
分割ビューの左側には、SourceListスタイルを持つように設定されたNSTableViewまたはNSOutlineViewがあります。
右側には、テーブルビューのどのアイテムが選択されているかに応じて、アプリのメインコンテンツが表示されます。
どこかに(どこに?)右側に表示されるさまざまなビューのそれぞれを管理するNSViewControllersがあると思います(iPhotoにすべての写真、イベント、顔、場所などがあり、それらはすべて異なるペン先に表示される可能性があると思います) ... これは正しいです?)。
これらのビューコントローラは、おそらく左側のソースリストにバインドされています。これはどのように機能しますか(ソースリストはNSViewControllersのNSArrayControllerによってサポートされている可能性がありますか?)。
とにかく、それは私の考えです、私は完全にオフベースですか...?私はウェブを見回し、この投稿をここで見つけました。そして、いくつかのAppleソースコードを見ましたが、頭を包み込むことができないようです。どんな指導も歓迎します。
objective-c - ビュー コントローラーでファーストレスポンダーへのメッセージを処理する
単純なものが欠けているに違いありませんが、見えません。まず、セットアップ:
DATreeView
、のサブクラスNSView
DATreeViewController
、のサブクラスNSViewController
MainMenu.xib
DATreeViewController
からビューをロードするように構成された のインスタンスがありますDATreeView.xib
MainMenu.xib
のインスタンスもありDendreaAppDelegate
、アウトレットがあります (のインスタンスDATreeViewController
に配線されています) 。MainMenu.xib
DATreeViewController
Do Something!
doSomething:
、ファーストレスポンダにメッセージを送信するために接続されたメニュー項目です。- 偶然で
DATreeViewController
はなく、 というアクションがありdoSomething:
ます。
私が望むのは、Do Something!
メニュー項目が でdoSomething:
アクションをトリガーするDATreeViewController
ことです。ターゲット/アクション接続を直接設定することはできないふりをしましょう。ここで立ち止まって質問します。私の設計は完全に間違っていますか? 私がやろうとしていることは、私の神の目に愚か/悪/恥をかかせる可能性がありますか?
いいえ?偉大な。さて、私の人生では、メニュー項目をアクティブにすることはできません。違いがある場合は、Snow Leopardでこれを行っています。
NSView
との間の適切な統合を実現するためにNSViewController
、たとえばレスポンダー チェーンの管理など、 Matt Gallagher の例に従いましたが、実質的な変更が 1 つNSView
ありsetViewController:
ます。DATreeViewController
のloadView
メッセージ。私が知る限り、次のコードを実行した後applicationDidFinishLaunching:
レスポンダー チェーンは期待どおりに設定されます。つまり、次のようになります。
レスポンダ チェーンの一部でDATreeViewController
あり、 に応答しdoSomething:
、検証を実装していないため、Interface Builder を使用してDo Something!
メニュー項目を First Responder プロキシに接続するだけでよいと思っていました。をdoSomething:
アクションとして使用すると、メニュー項目が自動的にアクティブになります。
私は何を間違っていますか?かけがえのない支援をありがとうございました!
objective-c - NSViewController を使用して 10.4 と互換性を持たせる代わりに何をしますか?
私がする必要があるのは、ウィンドウの NSView でいくつかのペン先を読み込んで交換することだけです。私は NSViewController でそれを行う方法を知っており、10.5-10.6 で完全に動作させることができますが、10.4 で何をすべきかわかりません。
チュートリアルのリンクは大歓迎です。古いものを見つけるのに苦労しています。
(はい、本当に 10.4 をサポートする必要があります。)
cocoa - NSViewControllerとペン先からの複数のサブビュー
InterfaceBuilderとNSViewControllerを使用してビューをロードすることに頭を悩ませています。
私の目標は、次の説明を満たすビューを作成することです。ビューの幅全体に広がる上部のトップバー(ツールバーのようですが、正確ではありません)と、その下の2番目の「コンテンツビュー」。NSViewController
この複合ビューは、私のサブクラスが所有しています。
これにはInterfaceBuilderを使用するのが理にかなっています。ビューペン先を作成し、それに2つのサブビューを追加して、適切にレイアウトしました(トップバーとコンテンツビューを使用)。に設定File's Owner
しMyViewController
、コンセントなどを接続しました。
ロードしたいビュー(バーとコンテンツ)も独自のペン先にあり(これは私をつまずかせる可能性があります)、それらのペン先には、該当する場合、それぞれのNSViewサブクラスに設定されたカスタムクラスがあります。彼らに何を設定すればいいのかわからない(彼らの所有者になるはずなのでFile's Owner
推測している)。MyController
残念ながら、インスタンスを初期化するMyViewController
と、どのペン先も実際には表示されません。私はそれをウィンドウのcontentViewに適切に追加しました(他の方法でチェックしました)、そして実際には、物事は一種の負荷です。つまり、awakeFromNib
バービューに送信されますが、ウィンドウには表示されません。私は間違いなくどこかでいくつかのワイヤーが交差していると思います。おそらく誰かが私の欲求不満の一部を和らげるために手を貸すことができますか?
私がしていることを示すためにいくつかのコードを編集する
アプリケーションの起動が完了すると、アプリデリゲートからコントローラーが読み込まれます。
そして、私のinitWithNibNameでは、今のところsuperを呼び出す以外に何もしません。
cocoa - NSViewController で nib をロードした後... nib の NSButton にアクセスするにはどうすればよいですか?
NSViewController をサブクラス化し、IBOutlets をセカンダリ nib の NSButton にフックしました。
NSViewController をインスタンス化し、ビューを NSMenu に適用することはできますが、うまく機能しますが、ボタンにアクセスしてタイトルを変更するにはどうすればよいでしょうか?
NSViewController には IBOutlets があるため、コントローラーを介してこれを行うと想定しました。
ここからどこへ行くべきかについての指針はありますか?
編集して追加: toDoViewController クラス --
objective-c - 自己ウィンドウ内の NSView
NSView を含む基本的な *.xib ファイルがあります。
このカスタム ビューに別の nib ファイルを使用するにはどうすればよいですか? NSViewController とは何ですか? また、どのように使用すればよいですか?
objective-c - CoreData コンテンツを NSViewController に渡す
私は NSViewControllers の使用に移行し始めましたが、NSViewController を介して (たとえば) CoreData エンティティから TableView にコンテンツを取得する方法を一生理解できませんか?
cocoa - 「サブビューの追加」が機能しないのはなぜですか?
サブビューを追加しようとしましたが、機能しません。私のコードは次のとおりです。
NSLog はコンソールに次のように書き込みます。
addsubview が機能しないのはなぜですか? アプリを実行すると HomeView が表示されますが、サブビューとして使用できません。
core-data - 単一のウィンドウ インターフェースで複数のビュー コントローラー間で選択をバインドする
2 つのビュー コントローラー間でいくつかの NSArrayControllers を接続する方法に頭を悩ませている問題があります。ソース リスト テーブル ビューの選択内容を同期して、2 番目の詳細ビュー コントローラーの値を更新したいと考えています。
Cocoa Dev Central Build A Core Data Tutorialを出発点として使用していますが、2 つの NSViewControllers を含む NSWindowController があるようにアーキテクチャを分解しました。1 つは左側の投稿テーブル用、もう 1 つは投稿の詳細用です。権利。
NSWindowController サブクラスには、Post エンティティにバインドされた NSArrayController と、次を指す読み取り専用の managedObjectContext アクセサーがあります。[[NSApp delegate] managedObjectContext]
次に、メソッドで 2 つのビュー コントローラーを初期化しますwindowDidLoad
。
MDVCPostsListViewController
Post エンティティにバインドされた NSArrayController と、親ウィンドウ コントローラーの管理オブジェクト コンテキストにバインドされたその管理オブジェクト コンテキストを持ちます (すべて Interface Builder を介して)。
MDVCPostDetailViewController
には、ウィンドウ コントローラーのマネージド オブジェクト コンテキストにバインドされた NSObjectController と、 を介してウィンドウ コントローラーにバインドされたコンテンツ オブジェクトがありますpostsListsViewController.postsArrayController.selection
。これは本当に厄介なハックのようです。
MDVCPostsListViewController
のテーブル ビューで選択を変更すると、 で選択された値が更新されるようにするにはどうすればよいMDVCPostDetailViewController
ですか? 近づいたような気がしますが、何が欠けているのか、どのルートをたどるのが最善なのかわかりません。postsListsViewController.postsArrayController.selection
バインディングは非常にハッキーだと思います。うまくいけば、より良い方法があります。
説明を読むだけでなくコードを見ることを好む人のために、これを示すサンプル プロジェクトをアップロードしました。私のサイトhttp://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zipから入手できます。
cocoa - 別のNIBファイルからロードされたサブビューを表示する方法
iTunesのスタイルでソースリストを使用するCocoaデスクトップアプリケーションを開発しています。ソースリストの要素が異なると、メインコンテンツ領域に異なるビューが表示されます。
コンテンツ領域は完全に(垂直)で埋められていNSSplitView
ます。左側はNSOutlineView
ソースリストです。ユーザーが左側のアイテムを選択すると、関連するビューがスプリッターの右側に表示されます。
すべてを1つのNIBファイルに入れNSTabView
、スプリッターの右側にフチなしを配置することで、十分に機能させることができます。ビューを切り替えるには、選択したタブを変更するだけです。ただし、すべてのビューを1つのNIBに入れるのは悪い習慣なので、各サブビューを独自のNIBファイルに移動しようとしています。
私はこのプロセスのほとんどについてかなり良い考えを持っています—これらのビュー(、、など)ごとにサブクラスを作成し、新しいNSViewController
各NIBのファイルの所有者を関連するコントローラークラスに設定し、それぞれに接続を設定しますNIB、およびバインディングを作り直しました。画面に表示されているサブビューを実際に変更する方法がわかりません。EntityDetailViewController
GroupDetailViewController
view
NSView
右側のデフォルトのジェネリックを使用してaddSubview:
メッセージを送信してみました。私は最初のサブビューとしてそれに接続して呼び出してみました
しかし、すべてがスペースを空白のままにします。別のNIBからロードされたサブビューを表示するにはどうすればよいですか?