問題タブ [nsoutlineview]
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 - タブキーでのNSTableViewとNSOutlineViewの編集
私のアプリにはNSOutlineView
とがありNSTableView
、両方で同じ問題が発生しています。いずれかの行が選択されている状態で Tab キーを押すと、次のキー ビューをファーストレスポンダーにする代わりに、最初の列が編集モードになります。次の重要なビューに移動するには、すべての列をタブで移動する必要があります。
また、いずれかのビューに Shift キーを押しながらタブ移動すると、最後の列が編集モードになり、前のキー ビューに移動するためにさらにシフト タブが必要になります。
重要な場合は、自分のではなく、自動計算されたキー ビュー ループを にNSWindow
設定して使用していautorecalculatesKeyViewLoop = YES
ます。ユーザーが列を編集することを選択したら、列間をタブで移動したいと思いますが、タブキーが編集モードをトリガーするのは標準的な動作ではないと思います。
アップデート
以下の役立つ回答のおかげで、解決しました。基本的に-keyDown
、カスタム テーブル ビュー クラスをオーバーライドします。これは、テーブル ビューからのタブ移動とシフト タブ移動を処理します。ただし、テーブル ビューへのシフト タブ移動を解決するのはより困難でした。別のビューからコントロールを受け入れる場合YES
、カスタム テーブル ビューにブール値のプロパティを設定します。-acceptsFirstResponder
デリゲート-tableView:shouldEditTableColumn:row
は、現在のイベントがシフト タブkeyDown
イベントである場合にそれをチェックします。-tableView:shouldEditTableColumn:row
が呼び出され、それはシフト タブ イベントではありません。テーブル ビューのプロパティを に戻してNO
、通常どおり編集できるようにします。
以下に完全なソリューションを貼り付けました。
cocoa - NSOutlineViewとCoreDataに挿入されたアイテムを自動的に選択する方法
エンティティにバインドされたバインドと、にバインドされたツリーがありNSTreeController
ます。ここで、「追加」ボタンをクリックしたときに、に新しいエンティティを追加し、エンティティを選択して、編集用に強調表示したいと思います。を呼び出すと、挿入は非同期になり、アウトラインビューでは新しい行が自動的に選択されないため、新しいオブジェクトがどれであるかを知る方法がありません。そのため、プログラムで新しいエンティティを挿入する必要があります。したがって、を呼び出します(以下を参照)。NSArrayController
NSOutlineView
treeController
[arrayController add]
addButton
createNewGroup
outlineViewController
繰り返しますが、新しいエンティティの挿入は同期プロセスではないようです。NSOutlineView
後の次の行でそれを見つけることができませんcurrentObject = [NSEntityDescription...
。そして、私はデータをリロードした後に試しました。そのため、アレイコントローラーの値の変化を観察する必要があります。この種の作業は、ほとんどの場合機能しますが、機能しない場合もあります。これはこの種のことへの正しいアプローチですか?
objective-c - mouseDownが頻繁に中断された後に更新されるNSTreeControllerのselectionIndexPaths
問題の背景:
NSOutlineViewがあり、すべてのtableColumnがプログラムでNSTreeControllerのarrangedObjectsにバインドされているため、selectionIndexPathsをバインドする必要はありません。NSTreeControllerのarrangedObjectsのソースはmutableArrayです。- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
メインスレッドで実行することにより、すべてのノードを動的にNSTreeControllerに追加しています。NSOutlineViewのmouseDownイベントを次のようにオーバーライドしました。
- (void)mouseDown:(NSEvent *)event { /*...myMethods...*/ [super mouseDown:event]; }
問題:
ノードが非常に高速に追加され、outlineViewでmouseDownイベントを実行すると、次の状況が頻繁に発生します。
TreeControllerにノードを追加するスレッドは、mouseDownイベントによって呼び出されるシーケンス(おそらく)を中断するため、そのinsertObject: atArrangedObjectIndexPath:
前に呼び出されsetSelectionIndexPaths:
ます。そのため、outlineViewの新しい選択は消え、treeControllerには古いバージョンのselectedIndexPathsが残っています。
私は1つの部分的な解決策を試しました:outlineView全体を変更できないように、insertObject:
メソッドを(で)ブロックしましたが、スレッドの競合が発生し、アプリがフリーズすることがよくあります。@synthesized(outlineView)
選択範囲が消える問題を解決する方法はありますか?
cocoa - NSSplitView の NSOutlineView バッジ
drawAtPoint:、NSAttributedString、そしてもちろん NSBezierPath を使用してセルの右側にバッジ番号を描画する NSOutlineView があります。NSSplitView のサブビュー内でアウトライン ビューのサイズ変更が発生すると、私の問題が発生します。バッジは、サイズ変更に伴って左または右に移動します。セル自体のテキストに到達すると、その下のテキストを停止したり切り捨てたりしません。すぐ上に飛んでいきます。
セルにその横にあるカスタム描画ビューを認識させ、それに応じてテキストを切り捨てる方法はありますか? 私は解決策 PXSourceList を既に試しましたが、それも役に立ちませんでした。
nsoutlineview - MonoMac の NSTreeController で NSOutlineView を使用する
MonoMac を使用して NSTreeController バインディングで NSOutlineView を使用する方法の例はありますか?
前もってありがとう、フレドリック
cocoa - NSOutlineViewのnoteNumberOfRowsChangedはreloadDataと同等ではありません
に別のものを追加Object
して、を呼び出します。ドキュメントを正しく読んだ場合、OutlineViewは、1行を追加し、それ自体を正しく再描画したことを認識できるはずです。しかし、代わりに何も起こりません。NSOutlineView
NSOutlineViewDataSource
[myOutlineView noteNumberOfRowsChanged]
私がそれを呼び出す[myOutlineView reloadData]
と、それは機能しますが、ドキュメントによると、(すべてのデータをリロードするため...当たり前)reloadData
よりもはるかに高いオーバーヘッドがありますnoteNumberOfRowsChanged
私はバインディングを使用していません、私はNSOutlineViewDataSource
自分自身を供給します。
誰かが私が間違っていることを知っていますか?
cocoa - UIKitでNSOutlineViewを模倣する
私は現在、UIKitでNSOutlineViewを模倣するソリューションを探しています。アイデアは、典型的なFinderウィンドウのリストビューに似た階層を表示するUITableViewを作成することです。つまり、アイテムは展開することもしないこともでき、各アイテムには子を含めることも含めないこともできます。
階層は数レベルの深さになる可能性があるため、セクションのみを使用することはできません。トリッキーな部分は、テーブルビューのデータソースを効率的に管理し、ユーザーがテーブルビューを操作したときに展開されるアイテムと、折りたたみまたは展開する行の数を認識するコントローラーを用意することです。
私は既成の解決策を求めているのではありませんが、これを効率的に機能させるための指針やアドバイスをいただければ幸いです。
cocoa - アウトライン ビューで NSXMLDocument を表示するときに TreeController のコンテンツ オブジェクトを設定するにはどうすればよいですか
アウトライン ビューで NSXMLDocument を表示したいと思います。ありがたいことに、apple には「NSXML オブジェクトでツリー コントローラを使用する」というドキュメントがあります。
しかし、私が得られなかったのは、TreeController のコンテンツ オブジェクトをどのように設定したかということです。
まず、表示したい NSXMLDocument に「Bind to」を設定し、その rootElement に「Model Key Path」を設定します。しかし、それはうまくいきません。
プロパティとして NSXMLDocument を持つオブジェクトに「バインド先」を設定し、「モデル キー パス」を NSXMLDocument.rootElement に設定する必要があることがわかりました。
では、なぜですか?
nsurl - アウトライン ビューで表示したい NSURL オブジェクトで NSOutlineView が -indexPath を呼び出すのはなぜですか?
NSURL オブジェクトのリストを入力したい NSOutlineView があります。私はこれをNSTableViewで動作させています。NSOutlineView に移行するための最初のステップとして (ユーザーが望むさまざまな基準で NSURL オブジェクトをグループ化できるようにするため)、テーブル ビューを模倣する方法で NSOutlineViewDataSource プロトコルの最小限のメソッドを実装しました。
[NSURL indexPath]
これにより、呼び出されていることを示す認識されないセレクター例外がスローされ続けます。このメソッドが呼び出される理由や回避方法を知っている人はいますか?