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 
    // ... 
} 
관련 문제