問題タブ [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 - Cocoaの他のペン先(つまり、Interface Builder)からペン先をロードします
別のNibファイルをロードするviewControllerを含むInterfaceBuilderのビュー設定があります。ただし、何らかの理由で、ロードされているnibファイルに含まれているオブジェクトが呼び出されることはありませんawakeFromNib
。ここで何が欠けていますか?インターフェイスビルダーでNibからビューをロードし、インターフェイスビルダーでプロパティとサイズを管理する方法はありますか?
一般に、複数のペン先を管理し、それらを複雑なビューに構成するためのベストプラクティスは何ですか?
最終的解決:
このようなNSViewControllerサブクラスを作成しました。
このように、View Controllerを含むペン先にプレースホルダーアウトレットをフックするだけで、他のペン先が自動的に読み込まれ、プレースホルダーからすべての属性がコピーされ、メインのペン先に置き換えられます。
cocoa - NSToolbarとビューコントローラの階層
次のクラス階層があります。
MyGeneralViewController
ViewControllerA
との両方で使用されるいくつかの一般的なコードを保持しますViewControllerB
。一般的なコードの1つは、の作成とNSToolbar
に必要なプロトコルメソッドの実装ですNSToolbarDelegate
。
ツールバーのボタンの1つは、ユーザーがNSTextView
別のウィンドウを開くことができるボタンです(より多くの領域、キーワードを操作するための追加機能など)。
このための方法は次のとおりです。
このツールバーボタンは、によって制御されるビューでのみ使用できますViewControllerA
。私の推論は、のopenTextWindow
メソッドのみを実装すると、ランタイムシステムがクラス階層を上ってツールバーボタンとに定義されたメソッドを検索するため、ViewControllerA
によって制御されるビューのツールバーボタンが灰色(使用不可)になるというものでした。ViewControllerB
それを見つけられません。
これはそうではないようです。を使用してメソッドを実装するとMyGeneralViewController
、ボタンは常に使用可能になります(期待どおりですが、必要なものではありません)。しかし、私がそれを実装するとき、ViewControllerA
それは決して利用できません。
私は何かが足りないのですか、それともこれが機能するはずの方法ですか?
cocoa - NSMutableArray が読み込まれる前に読み込まれない
マッピング目的で 2D NSMutableArray を使用して、単純な Mac ベースの 2D タイル エンジンをセットアップしようとしています。MVCの整合性を維持するために、マップオブジェクト(上記の配列を含む)への参照でNSViewControllerのサブクラスを使用し、それを介してタイルデータの描画要求をマップに渡します。ただし、drawRect コードの実行が開始される前に、アプリケーションが配列にオブジェクトを設定していないようです。
このアプリを記述どおりに実行するたびに、ウィンドウの読み込みに失敗し、デバッガーに「-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array」というエラー メッセージが表示されます。私が知る限り、ビューが実際に表示される前、または描画する必要がある前に、配列をゼロで完全に初期化する必要があります。
これは、私の NSViewController サブクラスの -loadView メソッドです。
これが私のマップオブジェクトのinitメソッドです:
ブレークポイントの賢明な使用は、
init がその for ループを開始する前に何らかの形で呼び出されています - そして明らかに、配列を参照する必要がある私の drawRect コードはそこから続き、すぐに失敗します。私は何か間違ったことをしているに違いありませんが、それが何であるかはわかりません。
objective-c - NSViewController が作成されていない
xibを備えた1つのメインウィンドウコントローラーでココアアプリケーションを構築しています。その xib には、多くのカスタム ビュー クラスが含まれています。xib に NSViewController を追加したいのですが、問題が発生しています。
インターフェイス ビルダーでは、NSViewController を xib にドラッグし、それにカスタム コントローラー クラスを割り当て、そのビューを xib の適切なビューに割り当てることができます。問題は次のとおりです。initWithNibName:Bundle:
またはloadView
が呼び出されません。
私は何が欠けていますか?
編集: 人々は質問を誤解しているようですので、明確にします。
ウィンドウにはすでにView Controllerがあります。私がやろうとしているのは、いくつかのサブビューに個別のビュー コントローラーを割り当てることです。NSViewController
サブクラスを適切なNSView
サブクラス (メイン ウィンドウの子)に関連付ける方法を知る必要があります。
つまり、複数のNSViewController
サブクラスを使用して、1 つの .xib ファイル内でさまざまなカスタム ビュー (それぞれ 1 つ) を制御しようとしています。これらのコントローラーとサブビューには、最終的に同じウィンドウに表示される独自の .xibs があります。
objective-c - カスタム ビューの NSMenuItem が更新されない
カスタム ビューを持つ NSMenuItem があります。ただし、メニューの最初の行を更新する場合は、設定したとおりではなく、xib ファイルにあるとおりにコンテンツを追加します。
私のコード: AppDelegate.m:
GravatarMenuItem.h:
アウトレットは、ファイルの所有者の XIB ファイルにリンクされています。
これが結果です: ログ:
結果:
iphone - ビューコントローラー間でデータを渡す方法
この時点でかなり複雑なアプリケーションを使用しており、データの処理方法が完全ではないように感じています。
そのため、アプリをより MVC に適したものにするためのいくつかの手順を開始しました。まず、すべての ViewController でインライン パーサー メソッドを使用することから、専用のパーサー クラスを作成することになりました。
呼び出すのは難しくありません。クラスをセットアップして、作成したイニシャライザ メソッドを呼び出して、リクエストのためにデータを渡します。オブジェクト クラスのすべてがうまく機能します。解析しています..しかし、ここで私は少し迷子になります。
そのデータを呼び出したViewControllerに戻すにはどうすればよいですか? 私はプロトコルとデリゲートを少し扱いました..しかし、それがこれにどのように適合するかはわかりません。
これは、私が達成しようとしていることのグラフィカルな例です。
上記のように、View Controller は、DB に接続するオブジェクト クラスの初期化メソッドを呼び出してデータをダウンロードし、そのデータを解析します。私が抱えている問題は、そのデータをViewController2に取得する方法です..
これを行うための最も適切で将来性のある方法は何ですか?
cocoa - NSTextField は、一度表示した後に入力を受け入れません
ドキュメントベースのココアアプリを開発しています。起動インターフェイスは GarageBand をモデルにしています。ウェルカム画面が表示され、2 つの交互表示 (セグメント化されたコントロールによって切り替えられます) のいずれかが表示されます: 「新規プロジェクトの作成」と「最近のプロジェクトの参照」。この各ビューは、専用の NSViewController (この場合は NewProjectViewControllerとRecentProjectsViewController ) によって制御されます。
これを実現するために、空のドキュメントを作成する代わりに、起動時にこの「ようこそ画面」を表示するように NSDocumentController をサブクラス化しました (空のドキュメントは、ユーザーが特定の最小設定を指定するまで、私のアプリでは意味がありません)。
起動/最初のドキュメントの作成後、ユーザーが [Create New Project...] (つまり、新しいドキュメント) を選択すると、Welcome 画面の [New Project] タブと同じインターフェイスを再利用するウィンドウが表示されます。同じNewProjectViewControllerを作成し、そのビューをウィンドウに追加します。
どちらの場合も、View Controller のビューは .xib から作成されます。ビュー コントローラ自体はプログラムによってインスタンス化され、そのビューは -addSubview: を使用してウィンドウの既存のサブビューに追加されます。
NewProjectViewController のビューには、いくつかの編集可能な NSTextField インスタンスとその他のコントロールが含まれています。
問題: ビュー コントローラーのビュー内のすべての NSTextField インスタンスは、初回のみテキスト入力を受け入れます。ビューが表示された 2 回目以降、テキストを編集しようとすると、システム アラート サウンドが生成されます。テキストは選択 (強調表示) できますが、変更はできません。また、テキストはプログラムで変更できます。
他のコントロール (ポップアップ ボタン) は問題なく変更できます。
最初から [ようこそ] 画面ではなく [新しいドキュメント] ウィンドウを表示しようとしましたが、結果は同じです。
これはファーストレスポンダーの問題ですか?
objective-c - NSViewControllerからビューを表示するにはどうすればよいですか?
私はobjective-cが初めてなので、ご容赦ください。ウェブカメラから画像を返すクラスがあり、それを画面に表示しようとしています。サブクラス化NSViewController
して、カメラクラスから画像を取得し、それをインスタンスNSImageView
に設定し、NSViewController
のビューをに設定しましたNSImageView
。Interface Builderでカスタムビューを作成し、NSViewControllerオブジェクトをMainMenu.xibにドラッグして、そのクラスをPhotoGrabberControllerに設定し、カスタムビューからPhotoGrabberControllerにクリックドラッグを制御して、アウトレットバインディングをビューに設定しました。(私はそれが舞台裏でどのように機能するかを本当に知りません、それは私には魔法のようです)。画面には何も表示されず、私はこれをずっと遊んでいます。
PhotoGrabberController.hで
PhotoGrabberController.mで
AppDelegateにさまざまなものを入れていじくり回しましapplicationDidFinishLaunching
たが、現在の設定方法では、そこに何も入れる必要はないと思います。
質問
- メインウィンドウに画像を表示するにはどうすればよいですか?
- ビューサブクラスを作成する代わりにPhotoGrabberController.viewを使用しても大丈夫ですか?
- ここで物事がどのように機能するかについての私の理解の何が問題になっていますか?私はこれを理解しようと多くの時間を費やしましたが、どこにも行き着きませんでした。
- これがどのように機能するかを完全に理解できるリソースに私を導くことができますか?Appleのドキュメントが詳細すぎて分厚いことがわかりました。ウィンドウ、ビュー、およびビューコントローラがどのようにロードされて相互作用するかを理解したいだけです。
ios - initWithNibName:bundle:? で初期化された NSViewController をセットアップする最良の方法
nib からビューをロードする NSViewController のサブクラスがあります (initWithNibName:bundle: を使用し、その nib のファイルの所有者です)。
ペン先がロードされた後、いくつかの初期化を行う必要があり、コードを最も互換性のあるものにしたい:
- iOSの場合:それを行うためのviewDidLoadメソッドがあります
- osx の場合: ユキヒョウでは、viewDidLoad のようなメソッドはありませんが、ファイルの nib の所有者でも awakeFromNib が呼び出されます。
だから私の質問は:
- awakeFromNib は、Lion の nib のファイルの所有者でも呼び出されますか?
- awakeFromNib を使用する場合、[super awakeFromNib] を呼び出す必要がありますか? (NSViewController は awakeFromNib を実装していますか?)
- 答え 1 が「はい」の場合、これは良い解決策ですか? :
答え 1 が NO の場合、これは良い解決策ですか? :
ありがとうございました
objective-c - NSViewへのサブビューの追加は表示されますが、削除できません
アプリケーションウィンドウには、2つのNSViewがあります。左側のNSView(「メニュー」)にはいくつかのボタンがあります。ボタンの1つをクリックすると、右側のNSViewのコンテンツ(「コンテンツ」)が変更されます。
右側のビューごとに、個別のNSViewControllerが読み込まれ、それらのビューがサブビューとして追加されます。左側でさらにボタンを押すと、右側に追加されたサブビューが削除され、新しいビューがサブビューとしてロードされます。
これを実現するために、次のようにAppDelegateにメニューをロードします。
これは正常に機能します。ご覧のとおり、メニューVCにNSViewポインターがあり、これがcontentViewを指しているため、サブビューを入力できます。
ボタンを押す方法として、次のようにします。
これは動作しません。
ただし、MenuViewController実装のawakeFromNibメソッドからサブビューを追加すると(アプリを開いたときのデフォルトコンテンツの場合)、機能します。ただし、を使用してそのサブビューを削除しようとすると
私はできません。興味深いのは、サブビューの数をカウントしようとすると(awakeFromNibメソッドでサブビューを追加した後でも)、self.contentViewに対して0個のサブビューが返されることです。なんで?どうすれば正しく動作させることができますか?
ありがとう