2012-01-01 31 views
5

Tôi có một NSOutlineView dựa trên Chế độ xem được liên kết với một NSTreeController. Mọi thứ dường như hoạt động chính xác cho đến khi tôi triển khai phương thức outlineView:isGroupItem: trong ủy quyền của tôi, sau đó tiêu đề nhóm đột nhiên ngừng hiển thị. Như thế nàyXem NSTableView/NSOutlineView và isGroupItem

enter image description here

Tôi xác nhận rằng Nếu tôi được thay đổi NSOutlineView đến ô dựa trên thì mục nhóm xuất hiện đúng cách. Hành vi tương tự cũng được quan sát cho NSTableView. Có ai khác đã gặp sự cố này không?

Trả lời

11

Giải quyết!

Hóa ra tôi đã phải thực hiện các phương pháp sau đây trong NSOutlineView đại biểu

- (NSView *)outlineView:(NSOutlineView *)outlineView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item { 
    if ([self outlineView:outlineView isGroupItem:item]) { 
     NSString *vId = [[[outlineView tableColumns] objectAtIndex:0] identifier]; 
     return [outlineView makeViewWithIdentifier:vId owner:self]; 
    } 
    return [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self]; 
} 

Rõ ràng, bởi giao diện mặc định dựa NSOutlineView tạo view cho mỗi tế bào trong bảng bằng cách định vị quan điểm với nhận dạng giống như cột . Tuy nhiên, trong trường hợp của một hàng nhóm/nhóm, không có tableColumm được liên kết với hàng đó, do đó chế độ xem hóa ra là không có và không hiển thị.

Chơi xung quanh với quả táo TableViewPlayground sample project thực sự đã giúp! Rat khuyen khich!

+0

Cảm ơn bạn đã cập nhật chi tiết. –

+0

+1 Đối với tham chiếu TableViewPlayground – rluba

+0

Tại sao không phải là 'outlineView: viewForTableColumn: item:' trong [tài liệu chính thức 'NSOutlineViewDelegate'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/ NSOutlineViewDelegate_Protocol/Reference/Reference.html) – zakdances

Các vấn đề liên quan