2014-02-24 3 views
4

Doors의 레이아웃과 비슷한 NSTableView을 만들려고합니다. Things 2.0 -- (c) CulturedCodeNSView의 Autolayout이 NSTableView의 셀로 사용되는 경우

나는 그들이 무엇을하고있는 것은과 NSTableView를 사용하는 가정 사용자 정의 그린 NSTableCell - 혹은 그것이 NSSegmentedControl입니다. 나는 NSTableCell 길을 내려 가고있다. 나는 NSTableCellView의 서브 클래스를 만들고 사용자 정의 셀을 그렸습니다 (이것은 테스트를위한 init 메소드에 모두 포함되어 있습니다).

- (id)init { 
    self = [super init]; 
    if (self) { 
     _checkbox = [[NSButton alloc] init]; 
     [_checkbox setButtonType:NSSwitchButton]; 

     _textview = [[NSTextView alloc] init]; 

     [self addSubview:_checkbox]; 
     [self addSubview:_textview]; 

     [self setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     NSDictionary *views = NSDictionaryOfVariableBindings(_checkbox, _textview); 

     [self addConstraints: 
       [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_checkbox]-[_textview]|" 
                 options:0 
                 metrics:nil 
                  views:views]]; 
    } 

    return self; 
} 
@end 

꽤 자명하지만 실제로 작동하지 않습니다. 만족할 수없는 제약 조건에 대한 오류가 발생합니다. 하위 클래스 NSTableCellView 안에 autolayout을 사용할 수 있습니까?

+0

.. 독자적으로 사용할 때보기 작업이 필요하지 않습니까? IB 편집기에서 Xcode의 경고를 표시합니까? – Jay

+0

물론 제작자에게 이메일을 보내달라고 요청할 수도 있습니다. 그들은 당신에게 말할지도 모른다. – uchuugaka

답변

3

당신은 테이블 뷰 컨트롤러에 몇 가지 추가 코드를 도입해야하지만 그것은 가능하다 :이 셀을 업데이트하게됩니다

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row 
{ 
NSTableCellView *rowView = [self.tableView makeViewWithIdentifier: RVIssueSelectionTableRowViewContentKey owner: self]; 

[rowView setObjectValue: yourDataObject]; // or update your cell with the according data the way you prefer 
[rowView setNeedsLayout: YES]; 
[rowView layoutSubtreeIfNeeded]; 

return [rowView fittingSize].height; 
} 

레이아웃 그리고 당신은 높이를 원하는 것 반환 할 수 있습니다. 이 호출은 비싸기 때문에 계산 된 셀 높이를 캐시해야합니다. 이 답변은 지금 찾지 못했던 다른 답변에서 가져온 것입니다 (발견했을 때 솔루션이 업데이트됩니다). 테이블 뷰 데이터 소스 메서드를 통해 셀의 높이가 x가되도록 강제하기 때문에 제약 조건에 대한 오류 메시지가 생성됩니다. 그러나 귀하의 제약 조건은 셀의 높이를 설정하여 만족되도록합니다. 동시에 둘 다 작동하지 않습니다.