2012-01-18 4 views
1

私は行ラベルを描画するためにカスタムNSTextFieldサブクラスインスタンスを持つビューベースNSTableViewを持っています。テーブルビューのカスタムNSTextField:背景色を変更するために行が選択されているかどうかを確認するにはどうすればよいですか?

行が選択(強調表示)されているかどうかによって、カスタムテキストフィールドの背景色を変更する必要があります。

親テーブルの行が選択されている場合、テキストフィールドのdrawRect:(NSRect)dirtyRectをどのように知ることができますか?

テキストフィールドには、テーブルビューの一部であることもわかりません(そうしなくてもよい)。

平文をテーブルビューに配置すると、行の選択状態に基づいてフォントの色が自動的に変更されるため、テキストフィールドが選択/強調表示されているかどうかを何とか知る必要があります。

答えて

0

テーブルビューは、セルビュー内のビューの親ビューです。 したがって、drawRectメソッドのビュー階層を反復して、親テーブル・ビューを見つけることができます。 カスタムNSTextFieldを含む行が選択されているかどうかをチェックします。

override public func drawRect(dirtyRect: NSRect) { 
    var backgroundColor = NSColor.controlColor() //Replace by the non selected color 
    var parentView = superview 
    while parentView != nil { 
     if let tableView = parentView as? NSTableView { 
      let row = tableView.rowForView(self) 
      if tableView.isRowSelected(row) { 
       backgroundColor = NSColor.alternateSelectedControlColor() //Replace by the selected background color 
      } 
      break 
     } 
     parentView = parentView?.superview 
    } 
    //Perform the drawing with the backgroundColor 
    // ... 
}