2012-12-07 23 views
10

Tôi đang tìm cách tạo phần iOS giống như trong NSTableView (như trong iTunes 11 - Đính kèm).Xem dựa trên NSTableView với các mục

Như bạn có thể thấy trong ảnh chụp màn hình, "Album" là một phần và "Bài hát" là thứ hai. Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn!

enter image description here

+0

Hãy thử điều này - trong các bảng tổng quan ô phức tạp https://developer.apple.com/library/mac/samplecode/TableViewPlayground/Introduction/Intro.html – johndpope

Trả lời

1

Nếu bạn muốn phần về cơ bản bạn phải cuộn của riêng bạn (thừa nhận rằng hàng x được coi là một tế bào phần và cung cấp một cái nhìn phần. TwUI có TUITableView cho phép này (và ồ ạt cải thiện hiệu suất di chuyển, theo kinh nghiệm của tôi)

+0

"nhận ra rằng hàng x được coi là ô phần và cung cấp một phần xem "chính xác là những gì tôi cần để tiến lên phía trước. Tôi đã cố gắng sử dụng TwUI trước nhưng tôi đã kinda chạy vào một số lỗi tai nạn với nó. – user754905

+0

Có một số giải pháp khác ngoài TwUI có sẵn, nhưng tôi đã tìm thấy TwUI cho đến nay là mượt mà nhất. – Max

+0

Tôi đã cập nhật TWUI để cho phép các tiêu đề dính - nhưng có khuyết điểm với thư viện này (đáng chú ý nhất là bạn không thể thêm các bản xem trước nsview). https://github.com/johndpope/osx-stickyheaders – johndpope

19

tôi thấy đây là một câu hỏi cũ, nhưng câu trả lời là sử dụng một Xem dựa NSTableView sau đó thực hiện tableView:. viewForTableColumn: hàng :.

này được mã dựa trên cách Tôi làm điều đó. Nó chưa được biên dịch trong Xcode.

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSTableCellView *cell = nil; 
     // get your row from your array of objects. 
     // determine if it's a section heading or not. 

    SomeClass *someObject = [self.myObjects objectAtIndex:row]; 

    if (someObject.isSectionHeading) { 
     cell = [tableView makeViewWithIdentifier:@"HeaderCell" owner:self]; 
     cell.textField.objectValue = someObject.headingName; 
    } else { 
     cell = [tableView makeViewWithIdentifier:@"DataCell" owner:self]; 
     cell.textField.objectValue = someObject.rowValue; 
    } 

    return cell; 

} 

Và cũng tableView: isGroupRow sẽ đặt một nền màu xám trên phần tiêu đề của bạn

-(BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row { 
    BOOL isGroup = NO; 
    // Choose some way to set isGroup to YES or NO depending on your records. 
    return isGroup; 
} 

Hãy chắc chắn rằng trong Interface Builder bạn đã thiết lập các định danh cho NSTableCellViews của bạn để "HeaderCell" và "DataCell". Hoặc sử dụng bất kỳ tên nào bạn muốn. Miễn là nó khớp với mã của bạn. Bạn có thể có bao nhiêu ô này tùy thích.

Nếu bạn tạo lớp con của NSTableCellView thì bạn có thể dễ dàng thêm trường văn bản, hộp kiểm, hình ảnh, v.v. của riêng bạn vào chế độ xem và đặt giá trị tương ứng.

+2

Tôi có thể thêm rằng bạn cũng có thể cung cấp chiều cao của ô khác nhau giữa các ô nội dung và ô phần bằng cách thực hiện phương thức 'tableView: heightOfRow:'. Đối với ô phần, bạn có thể sử dụng chiều cao mặc định như sau: '[tableview rowHeight]' và cho ô nội dung bạn có thể sử dụng của riêng mình, như 70.0. – HuaTham

+0

Theo như tôi biết - kỹ thuật này không thực sự dính vào xem tiêu đề ở đầu xem như iphone nào. Tôi chỉ có thể tạo hiệu ứng này bằng cách sử dụng TWUI github.com/johndpope/osx-stickyheaders – johndpope

+0

@johndpope Kiểm tra thuộc tính trên NSTableView được gọi là 'floatsGroupRows' –

2

Có hướng dẫn rất tốt và đơn giản cho thấy cách triển khai NSTableView với các phần có mã mẫu trên github. Chỉ cần xem nó here và trong phần mô tả video, có một liên kết để tải xuống mã.

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