問題タブ [nscollectionview]

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.

0 投票する
3 に答える
3996 参照

objective-c - NSCollectionView のビュー サブクラスにプログラムでバインドするにはどうすればよいですか?

NSCollectionView の作成に成功し、IB のビュー プロトタイプにラベルを追加して、表現されたオブジェクトのプロパティにバインドしました。ここで、NSTextField を自分の表現するオブジェクトのプロパティにバインドして、プログラムで NSButton と NSTextField を作成したいと考えています。ボタンをクリックすると、NSTextField を表示および非表示にしたいと考えています。

私が遭遇した問題は、コントロールの初期化コードをビューの initWithCoder メソッドに配置し、バインディングをビューの awakeFromNib に配置すると、バインディングが接続されないことです。コントロールの初期化をawakeFromNibに入れると、ボタンがクリックされたときに、ビュー内のコントロールにアクセスできなくなります(NSLogを使用して印刷するとnullになります)。

私が言えることから、問題は NSCollectionView の動作方法である可能性があり、ビューのインスタンスを作成し、コレクションビューにあるオブジェクトの数ごとにそれをコピーします。ボタンを初期化し、バインディングをプロトタイプのコピーで動作させるにはどうすればよいですか?

以下は、サブクラス化されたビューのawakeFromNibでの初期化コードとバインディングです。

SubView.h

SubView.m

0 投票する
1 に答える
2576 参照

objective-c - NSCollectionView と Outlets を適切に使用するには?

コンセントを使用して NSCollectionView に常駐する NSViews のコントロールを必死に接続しようとしています。コレクション ビューは、NSArrayController を使用して供給されます。

別の NIB ファイルに NSView を作成し、NSCollectionViewItem の実装で copyWithZone を上書きしてロードしました。

この指示に従ってこのアプローチを使用しました。

残念ながら、これが起こっていることです:

代替テキスト

NSView は次のようになります。

代替テキスト

NSCollectionView は NSScrollView にあり、スクロールバーは自動的に有効になるように設定されています。しかし、ご覧のとおり、スクロールバーはありません。

NSCollectionView がその NSView のサイズを知っているので、何をする必要があるのか​​ よくわかりません。

別のNIBファイルを持っていなかったときは以前は機能していましたが、ビューからアイテムへのアウトレット接続を作成できませんでした:-(

0 投票する
1 に答える
2160 参照

objective-c - NSCollectionView がデータ変更時にサブビューを更新しない

Interface Builder を使用してNSCollectionViewをセットアップしました。私のプロトタイプ ビューには、進行状況インジケーターとテキスト フィールドが含まれています。「タスク」オブジェクトが進行状況インジケーターの値とテキスト フィールドの値を維持するようにバインディングを設定しました。

コレクションに新しいオブジェクトを[NSCollectionView newItemForRepresentedObject:]追加すると(アレイコントローラーに追加することで)、すべて正常に機能します。プログレス インジケータとテキスト フィールドの初期値が適切に設定されます。ただし、値が変更された場合、プロトタイプ ビューには反映されません。値は常に初期値を保持します。

「タスク」オブジェクトのプロトタイプビューへのポインターを追加しようとしましたが、更新を強制しようとしまし[NSView setNeedsDisplay:TRUE]たが、役に立ちませんでした。プロトタイプ ビューをサブクラス化し、プログレス インジケーターへのアウトレットを与えたので、実行時にその値を調べることができました。不思議なことに、ビューが正常に作成されたにもかかわらず、プログレス インジケーターはそうではありません! 実際に初期値を表示して維持するという事実とはかなり矛盾しています!

現在のセットアップを使用して、変更をビューに反映させる方法はありますか?

前もって感謝します。

0 投票する
1 に答える
231 参照

objective-c - Interface Builder を介して NSCollection ビュー内でアクションをフックできますか?

私は NSCollection ビューを持っています。レプリケートされたビューのコントロールを、presentedObject を渡してコントローラーのアウトレットに接続するか、presentedObject 自体のアウトレットに接続したいと考えています。IB でこれを行うことはできますか、それともプログラムで行う必要がありますか?

0 投票する
5 に答える
1068 参照

cocoa - Cocoaでカスタマイズされたリストを実装するにはどうすればよいですか?

Things.appのToDoリストに非常によく似たエントリのリストを使用してCocoaアプリを作成したいと思います(スクリーンキャストを参照)。問題は私が使うべきかどうかです

  1. TableView、
  2. CollectionViewまたは
  3. WebView。

それらすべてで機能すると思いますが、次の要件に最も適しているのはどれですか?

  • エントリのリストがあります->1列と多くの行
  • ドラッグアンドドロップによる並べ替え
  • 単一のエントリを選択し、削除などのアクションにキーを使用します
  • エントリを開きます。行を展開して、より多くの入力フィールドを表示する必要があります
  • カスタマイズされた外観:丸みを帯びた角、影、背景のグラデーション

これまでのところ、TableViewにはほとんどの機能がありますが、外観をカスタマイズするのは難しいとのことですが、CollectionViewにはドラッグアンドドロップがありませんが(右?)、設計は簡単で、WebViewはそうしないとかなりの労力を要します。ユーザーエクスペリエンスを損ない、モデルを入力フィールドに直接バインドできません。

私が見逃している長所と短所は何ですか?また、何を使用することをお勧めしますか?

0 投票する
1 に答える
634 参照

cocoa - NSCollectionViewItemのインスタンスでNSTableViewを更新しています

私のセットアップでは、Macに接続されたボリュームのNSCollectionViewがあります。NSCollectionViewItemのビューには、そのボリュームのコンテンツを一覧表示するNSTableViewを含むNSBoxがあります。

NSTableViewにアイテムを追加/削除しようとすると、問題が発生します。NSBoxは一度初期化されたように見えるため、NSTableViewは1つだけです。これは、NSTableView内のデータを更新する場合、IBOutletでreloadDataを呼び出して、すべてのテーブルを更新させることができないことを意味します。

NSBoxのサブクラスにIBOutletを作成すると、インスタンスではnilになるため、それを介して呼び出すことはできません。

私が最も近いのは、列の行でオブジェクトを返すコードの周りに@try @catchを囲むことです。そのアイテムが存在しないために例外が発生するため、tableViewを取得してreloadDataを呼び出すことができます。その特定のNSTableViewを更新します。

これに伴う問題は、削除されたアイテムがテーブルの最後にある場合、またはアイテムが追加された場合、既存のすべてのアイテムを表示できるため、例外が発生しないことです。

NSCollectionViewItemのビューでNSTableViewを使用した経験はありますか?テーブルをどのように更新しましたか?

0 投票する
2 に答える
2947 参照

objective-c - 10.6/Xcode 3.2 の NSCollectionView

NSCollectionViewItemXcode 3.1.2では、サブクラスのnib を次のNSCollectionViewItemようにロードしていました。

10.6 未満の Xcode 3.2 では、同じメソッドでエラーが発生することはありませんが、NSCollectionViewどちらのビューも読み込まれません。

ビューを表示するために他に何かする必要がありますか? NSCollectionItemまたは、スーパークラスをに変更することで、これを行うより良い方法はありNSViewControllerますか?

結局のところ、copyWithZoneこの標準機能を実現するためにオーバーライドすることは、私には常にハックのように思えました。IB で使用されるペン先を指定できるようにすべきだと思いますが、Apple はそうは考えていないようです。

ドキュメントで利用可能な例を見ましたが、を使用してNSCollectionViewItemプログラムでインスタンス化さinitWithNibNameれていますが、IBで作成したいと思います。

更新

kperryua が提案したことを実行しましたが、今では からアウトレットにアクセスできませんNSCollectionViewItem。これが私がやろうとしていることです:

ラベル名をファイル所有者にバインドしました。これは私のNSCollectionViewItem. これは 10.5 で完全に機能していましたが、現在はアウトレットが割り当てられていません (GDB で確認しました)。

バインディングを示す画像 http://img21.imageshack.us/img21/671/picya.png

更新 2 :

また、を(PersonController)NSCollectionViewitemPrototypeサブクラスにバインドしました。NSCollectionViewItem

バインディングを示す画像 http://img503.imageshack.us/img503/4672/pic2d.png

File's Ownerこれで、 のPersonView.nibと のitemPrototypeの両方がNSCollectionViewサブクラスを指しています。

コンソール出力を示す画像 http://img340.imageshack.us/img340/6184/pic3.png

スクリーンショットでわかるように、アイテムは表示されますが、コンセントlabelNameにアクセスできないため、ラベルのテキストを変更できません。

「名前」ではないことを確認するために、設定しようとしている名前も記録しました。

ラベルの値を変更するには、何をする必要がありますか?

どんな助けでも大歓迎です。

0 投票する
2 に答える
2411 参照

objective-c - NSCollectionViewItem ダブルクリック アクション?

ユーザーが をダブルクリックしたときのアクションを設定するにはどうすればよいですかNSCollectionViewItemNSTableViewたとえば、setDoubleActionメソッドがあります。に似たものはありNSCollectionViewますか?

ありがとう

0 投票する
1 に答える
2094 参照

objective-c - NSCollectionView は何も描画しません

を設定しようとしていますNSCollectionView(過去に成功しましたが、何らかの理由で今回は失敗しました)。

「TestModel」というモデルクラスがありNSString、文字列を返すだけのプロパティがあります(現在はテスト目的のためだけです)。次にNSMutableArray、メイン アプリのデリゲート クラスでプロパティ宣言を行い、この配列にTestModelオブジェクトのインスタンスを追加します。

次に、Content Array がアプリのデリゲートにバインドされた Array Controller を用意しますNSMutableArray。ここまでのすべてが正常に機能していることを確認できます。NSLogging:

うまくいきました。

次に、コレクション ビューのセットアップ (itemPrototype とコンテンツ)、およびコレクション ビュー アイテム (ビュー) に適切なバインディングをすべて用意します。次に、 Collection View にバインドされたコレクション アイテム ビューにテキスト フィールドを作成しますItem.representedObject.teststring。ただし、アプリを起動すると、コレクション ビューには何も表示されず、空白の白い画面だけが表示されます。私は何が欠けていますか?

更新:これが私が使用するコードです(wil shipleyによって要求されました):

そして、前述のように、Array Controller のコンテンツ配列はこの「objectArray」にバインドされ、NSCollectionView の Content は Array Controller.arrangedObjects にバインドされます。NSLogging [arrayController ArrangeObjects] によって配列コントローラーにオブジェクトが含まれていることを確認でき、正しいオブジェクトが返されます。NSCollectionView には何も表示されません。

更新 2: [collectionView content] をログに記録すると、何も得られません:

問題はおそらくそこにあります。

更新 3:ここで要求されたのは、Xcode プロジェクトです。

http://www.mediafire.com/?mjgdzgjjfzw

メニューバー アプリなので、ウィンドウはありません。アプリをビルドして実行すると、「test」というメニューバー項目が表示されます。これにより、NSCollectionView を含むビューが開きます。

ありがとう