問題タブ [nscell]
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: 編集可能なテキスト領域を持つカスタム NSView を実装する方法は?
編集可能なテキスト領域を持つカスタム NSView を作成するために必要な最小限の実装は何ですか? これには NSTextFieldCell を使用できると思います。ビューでセルを描画することに成功しましたが (これは簡単です)、編集可能にするには、ビューとセルの間でより複雑な調整が必要なようです。サンプルコードはどこかにありますか?
アップデート。私の長期的な目標は、同じビュー上により多くの編集可能なテキスト領域を持つことであることを明確にするべきでした。知る限り、セルは本格的なビューよりも軽量であるため、その場合はセルを使用することをお勧めします。私の更新された質問は次のとおりです。適切な NSCell を使用して、編集可能なテキスト領域を持つカスタム NSView を作成するために必要な最小実装は何ですか?
cocoa - NSButtonCell インスタンスを使用してカスタム NSCell を取得し、マウス クリック/マウス イベントを処理する
OK、私はこれに本当に困惑しています。NSTextFieldCell を組み合わせたチェックボックスを作りたいです。マウスがテキストではなくボックスに当たった場合、チェックボックスがオンになることが重要です。私は多かれ少なかれこれを達成しましたが、1つのチェックボックスを続けてクリックしたため、問題はマウスイベントを受け取りましたが、それらはすべてNSOnStateに変わりました。これを機能させるために、私が行ったことと、失敗したさまざまな試みを示します。
だから、これは私がこれまでにやった方法です:
ヘッダ:
実装:
私はおそらくやるべきではないことを知っています:
そこに...結果は、すべてのすべてのチェックボックスがNSOnStateになるためです。細胞を再利用しているからでしょうか。ImageAndTextCell が同じテーブルビューに異なる画像を持つことができるのはなぜですか? マウスイベントを処理するにはどうすればよいですか?
私が試してみました:
trackMouse: ... DOES が呼び出されます
しかし
startTrackingAt:...、continueTracking:...、および stopTracking:.... チェックボックス「ヒット領域」をクリックしても呼び出されません
トラックマウスで:...私は試しました
と
また、チェックボックスによってマウスイベントが処理されるようには見えません。
その単一のチェックボックスを NSOnState にするにはどうすればよいですか? 私はかなり近いことを知っていますが、多くのドキュメントを読んだり、グーグルで検索したりした後、これを解決することに成功していません。
提案やコメントを歓迎します..
OK ここで、オブジェクトの作成と破棄をもう少し示します..
objective-c - KVCでNSComboBoxの値を設定するにはどうすればよいですか?
Interface BuilderでいくつかのNSComboBoxを作成し、1つはプログラムで作成しました。
InterfaceBuilderで作成されたNSComboBoxは完璧です。私はそれらの値を共有ユーザーデフォルトコントローラーにバインドしていて、それらのビューが開かれると、それらは正しい値でそこに座っています。重要なことに、この値はNSComboBoxに「通常の」テキストとして表示されます。つまり、値は選択されていないように見えます。これが私が欲しいものです。
プログラムで作成されたNSComboBoxの場合、selectItemAtIndex:0を使用して値を設定します。これを行うと、正しい項目が選択されますが、テキストは選択されたように見えます。つまり、それは強調表示され、すべてです。これは欲しくない。これが私が試みた回避策です:
(i)フィールドエディタを取得し、挿入ポイントをテキストの最後に設定します。奇妙なことに、これを行うと、フィールドエディタの文字列がnilまたは空になりますが、これは機能しません。これがフィールドエディタの正しい動作かどうかはわかりません。
(ii)setObjectValue、takeStringValueFromなど、コンボボックスの値を設定する他のさまざまな方法を試します。
(iii)最後に、そして最も苛立たしいことに、[myComboBox setValue:@ "The Default Item" forKey:@"value"]を使用してNSComboBoxの値を設定しようとしました。これはobjc_exception_throwで失敗します。おそらく、そのようなKVCキーがないためです。しかし、コンボボックスの値は、インターフェイスビルダーで機能するため、KVOで設定できることを知っています。正しいキーパスがわからないと思います。イントロスペクションを使用してすべてのプロパティを列挙しようとしましたが、コードを正しく機能させることができません(objc_property_tが期待されるヘッダーにありません)。
だから、私は2つの質問があります:
まず、ボックス内のテキストが選択されないように、プログラムでNSComboBoxのデフォルト値を設定する方法を知っている人はいますか?それに関しては、新しいNSComboBoxCellサブクラスを含め、これを行うためにあらゆる努力をします。
次に、誰かがIBがNSComboBoxの値を設定するために使用しているキーまたはキーパスを教えてもらえますか?あるいは、なぜこれを行うための私の努力が失敗しているのですか?
私はこれに何時間も取り組んできました、そして私は本当に意気消沈しています!
ありがとう、mustISignUp!これを修正してくれてとてもうれしいです。少しのフォローアップ:
(i)テキストの選択は間違いなくフォーカスによって引き起こされます。setRefusesFirstResponder:YESを呼び出すと、問題が修正されます。残念ながら、ウィンドウは本当にこのコンボボックスに焦点を合わせたいと考えています。これは、refusesFirstResponderをNOに戻すと(後でウィンドウの開始後に)テキストが再び選択されるためです(ユーザーが必要に応じてこのボックスに焦点を合わせることができるようにしたいと思います)。したがって、私の場合、決定的な解決策は[window makeFirstResponder:otherControl]を呼び出すことでした。奇妙なことに、[window makeFirstResponder:nil]は機能しません。なぜ何かアイデアはありますか?
(ii)バインディングとプロパティの違いを指摘していただきありがとうございます。この質問を調べながら、たくさんのことを学びました。1つは、-(NSArray *)exposedBindingsを呼び出すことでバインディングのリストを取得できることを学びました。これは、NSComboBoxの場合は(fontSize、alignment、toolTip、fontName、enabled、contentValues、fontFamilyName、font、hidden、fontItalic、textColor、value 、コンテンツ、編集可能、fontBold)。次に、[myComboBox bind:@ "value" toObject:[NSMutableString stringWithString:@ "defaultValue"] withKeyPath:@ "string" options:nil]を使用して値を設定できました。ここで、NSMutableStringには「文字列」をプロパティに追加します。最後に、これは実際にはテキスト選択の「問題」を修正しません。
したがって、残っている唯一の質問は、[window makeFirstResponder:nil]がコンボボックスからフォーカスを外すために機能しない理由かもしれません。それほど重要ではありませんが、誰かがアイデアを持っているかどうか知りたいです。
objective-c - NSTableView-長いテーブルビューでの値のプログラムによる表示
さて、私はクライアント用のiTunesオーバーレイを作成しています。私の質問は、特定のインデックスを使用して、行に表示されているセル/セルをテーブルビューの特定のエントリにプログラムで移動するにはどうすればよいかということです。
つまり、プレイリストを使用しているときにiTunesを複製すると、テーブルビュー(厳密にはプレイリスト)にこのジャンプを保証するのに十分なエントリが含まれている場合、テーブルビューで次の曲にジャンプします。
objective-c - NSCellはsetEnabled:NOですが、編集などにアクセスできます
いくつかの(NSTextField *)NSCellを含むカスタムコントロールを使用しています。セルレベルですべてのセルの使用を無効にしようとしましたが、すべてのセルを通過するループは何もしないようです。
[myCell setEnabled:NO];
コンパイルして実行します...
セルは引き続きクリックおよび編集可能です。
私の最終的な目標は、もちろん実行時にほんの少しだけ無効にすることです...しかし、セットアップ中にそれらすべてを無効にすることさえできません。
objective-c - プログラムでNSMatrixのNSCellにカスタムオブジェクトの配列を渡す
私はNSArray
カスタムのを持っていますNSObjects
。各オブジェクトには、いくつかのプロパティと、グリッド ビューに表示したい画像があります。NSMatrix は私の問題に対する適切な解決策のようですが、オブジェクトのコンテンツを表示する際に問題が発生しています。
注意すべきことがいくつかあります。
- コアデータを使用していない
- 私はプログラムでこれをやろうとしています
- 使用を検討し
NSCollectionView
ましたがNSMatrix
、この場合はより良い解決策のようです - すべてのセルは互いに同じ表示形式に従います。つまり、異なるセルに異なるタイプのオブジェクトを渡したくありません。オブジェクトの異なるインスタンスだけを渡します。
ウィンドウにNSView
(matrixContainerView) があるとします。コントローラー ファイルには、IBOutlet
to matrixContainerView があります。私のコントローラーでは、awakeFromNibに次のものがあります。
クラスMyCustomCell
ヘッダーは次のようになります。
実装ファイルは次のとおりです (図は簡略化されています)。
コントローラー内のオブジェクトを含む配列の初期化と設定の後、オブジェクトのインスタンスを設定MyModel
したいと思いNSMatrix
ます。
どうすればいいですか?
次のように、配列から2つのオブジェクトだけを追加しようとしました(テストとして):
しかし、これは最初のオブジェクト イメージを作成するだけです。上記が機能した場合、配列を列挙してオブジェクトを追加するのは簡単な作業でした。
セルを追加し、適切なオブジェクトをそれらのセルに渡して正しく表示するにはどうすればよいですか?
Appleのドキュメントは、プログラミング ガイドに関する限り、NSMatrix については控えめに言ってもまばらです。そこにある情報は私にとって非常に役に立ちますが、それはオブジェクトを追加して表示させた後でのみです!
アップデート
(上記の例のように) 2 つのオブジェクトを追加しない場合、出力は同じです。つまり、カスタム セルの 1 つの表現が画面に描画されます。これは、私が見ている単一の表現がマトリックスの初期化時に行われており、実際には列0行0に何も描画していないと思っていたことを示しています。それは今私をもっと混乱させます。
cocoa - NSTableViewのNSTextFieldCellの前にNSImageを表示するにはどうすればよいですか?
ファイルリストを表示し、NSTableColumnにファイルアイコンと編集可能なファイル名を表示したい。
また、ファイル名のすぐ後ろに追加のNSImageを表示するための最良の方法は何でしょうか(つまり、2番目のアイコンの右側に追加の列を追加しないことを意味します)。
cocoa - NSTableView NSCell 内のリンク
私は過去数日間、カスタム描画された NSCell でリンクを許可することを読んで実験してきましたが、基本的に何も使用できませんでした。各アプローチには常に問題があります。
これを行う方法を知っている人はいますか?
- (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlViewm を使用して NSCell をカスタム描画しています
NSCell は高さが可変のテキスト ブロックであり、その中にリンクが含まれています。一部のセルにはリンクがあり、一部のセルにはリンクがありません。
NSLinkAttributeName で nsattributedstring を使用してみました
セルへのすべてのヒットをインターセプトしてから、クリックした場所とテキスト内のリンクの場所を一致させようとしましたが、うまくいきません。
私は基本的にすべてのボードで見つけることができるすべての提案を試しましたが、ほとんどのコメントは古いので、誰かがこれを行う良い方法を考え出したことを願っています.
ありがとう、デビッド
objective-c - [NSTableColumn dataCellForRow] を介して NSCell データを取得する際の問題
スルーNSCell
から特定のデータを取得しようとしていますが、同じ行と同じ列に対して異なる値が表示されるたびに。データ ソースは常に同じままです。は.Pleaseにバインドされています。誰かがそれを正しく行うためのより良い方法を提案できるかどうかを確認してください。そして、私はそれらのデリゲート メソッドを実装したくありません。さらに情報が必要な場合はお知らせください。NSTableView
[NSTableColumn dataCellForRow]
NSTableView
NSArrayController
よろしく
objective-c - NSTableViewのCocoaカスタムセル:NSCellサブクラス化リーク
NSCellのサブクラスを作成し、必要性を実現するためにsetObjectValue関数をオーバーライドしました。リークの問題があることを除いて、問題はありません。NSCellのsetObjectValue関数は、元のオブジェクトを解放しないようです。
私がクラスに与えるオブジェクトは、NSCopyingプロトコルに準拠し、以下のようにcopyWithZone関数を実装したカスタマイズオブジェクトです。
。
私はここで同じ問題を見つけました。答えはありませんが、私の状況をよりよく説明するかもしれません。