10

ビューベースのテーブルビューを使用していますが、選択時に白いテキストカラーでNSTextFieldsを描画したくありません。実用的な解決策を見つけることができませんでした。ですから、どんな助けでも大歓迎です。

これが私の問題です:

ここに画像の説明を入力してください

「選択は白」のテキストもデフォルトのテキストの色で描画したい。

これまでのところ、私はそれを理解しました

  • に属性を設定しても、実際にtableView:viewForTableColumn:item:は役に立ちません
  • NSTextFieldコントロールのデフォルトの色とは異なるカスタムカラーに色を設定すると、白で描画できなくなりますが、フォントスタイル(太字、斜体など)は失われます。
  • NSTableViewselectionHighlightStyle属性をに設定NSTableViewSelectionHighlightStyleNoneすると、トリックは実行されますが、再描画されませんNSTableRowView。また、選択したスタイルは私が望むものではありません。最初のクリックで行を選択し、2番目のクリックでテキストフィールドを編集します。最初のクリックを使用NSTableViewSelectionHighlightStyleNoneすると、テキストフィールドの編集が開始されます。
  • NSTextFieldが境界線で囲まれている場合、テキストの色は変わりません。しかし、境界線のあるテキストフィールドは必要ありません(スクリーンショットに示されているように。テキストフィールドは編集可能です)

テキストフィールドが「どのように」白い色になるのか理解できませんでした。オーバーライドsetTextColor:して、選択が変更されたときに呼び出されないことに気付きました。したがって、NSAttributedStringは、NSTableViewの描画/選択ルーチン内のどこかに構築されていると思います。

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

4

3 に答える 3

14

私は答えを見つけました。サブクラス化NSTableCellViewしてオーバーライドする必要がありsetBackgroundStyle:ました。それで全部です!

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
  [super setBackgroundStyle: NSBackgroundStyleLight];
}
于 2012-07-24T23:56:21.877 に答える
0

をオーバーライドする代わりに、代わりにオーバーライドする方が便利であることNSTableCellViewbackgroundStyleわかりました。これは実際には、デフォルトで選択中にセルビューの背景スタイルを変更する方法です。viewWillDraw()NSTableRowView

次の方法でこの動作を無効にします。

class TableViewDelegate: NSObject, NSTableViewDelegate {
    func tableView(tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
        return TableRowView(frame: NSRect.zero)
    }
}

class TableRowView : NSTableRowView {
    private override func viewWillDraw() {
        // By do nothing we prevent the super method to be called. It would otherwise change the selected cell view's backgroundStyle property.
    }
}
于 2016-03-30T09:32:44.210 に答える
-1

テーブルビューデリゲートの-tableView:willDisplayCell:forTableColumn:row:メソッドでセルの色を設定しました。

-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell 
   forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
   if(tableView==<table view id of interest>)
      {
      ...
      [cell setTextColor:<colour appropriate for this cell>];
      ...
      }
   ...
}

これは、フォントサイズやスタイルには影響しません。

于 2012-07-23T03:51:58.940 に答える