2010-02-22 16 views
6

Tôi muốn một cái gì đó tương tự như cách iWork có màn hình chọn mẫu cho Trang khi bạn có thể chọn các mẫu khác nhau và mỗi chế độ xem chứa thông tin khác nhau có kích thước khác nhau, vv. bằng cách sử dụng phương thức newItemForRepresentedObject (trái ngược với việc sử dụng khung nhìn của giao diện itemPrototype), nhưng vì một lý do nào đó không định vị chính xác các khung nhìn, và nó không hiển thị số lần xem chính xác cho số mục hiện tại. Đây là mã của tôi. Tôi đã hy vọng một ai đó có thể có một cách tốt hơn để làm điều này, hoặc một ví dụ về cách thức này được thực hiện.Có cách nào để có các chế độ xem khác nhau trong NSCollectionView không?

personXem và companyView là các thuộc tính trong NSCollectionView được phân lớp, đó là IBOutlets cho chế độ xem trong IB.

-(NSCollectionViewItem *)newItemForRepresentedObject:(id)object{ 
NSCollectionViewItem *collectionViewItem = [[NSCollectionViewItem alloc] init]; 

[collectionViewItem setRepresentedObject:object]; 

if([[object valueForKey:@"company"] boolValue] == YES){ 
    NSView *view = [companyView retain]; 
    [collectionViewItem setView:companyView]; 
}else{ 
    [collectionViewItem setView:personalView]; 
} 

return collectionViewItem; 

}

+0

Có thể điều này có thể hữu ích: http://stackoverflow.com/questions/1210352/how-do-i-bind-programatically-in-the-view-subclass-of-my-nscollectionview?rq=1 –

Trả lời

0

(Nó thậm chí không dường như có thể làm cho một NSCollectionView với tầm mục khác nhau có kích thước, mỗi kích thước sẽ cần phải là một ước số nhiều hay số nguyên của một số kích thước "chính", và bạn cần phải thực hiện kiểm tra mục hàng lớn và sắp xếp lại để đảm bảo rằng thậm chí có thể hiển thị chúng trong một khung lưới. Bạn có chắc chắn bạn đang đặt câu hỏi đúng không?)

Ngoài ra, tôi không thấy gì cả như thế này trong iWork: tất cả các khung nhìn trong trình chọn mẫu của nó giống nhau. (Mặc dù NSImageView subviews của chúng tôi có kích thước khác nhau.) Tôi khuyên bạn nên nếu có thể bằng cách sử dụng cùng một chế độ xem và thay đổi các bản xem phụ của nó một cách thích hợp. Thật dễ dàng, ví dụ, ràng buộc tài sản của trường văn bản "" ẩn "hoặc thay đổi chiều rộng của một lần xem hình ảnh. Bạn không thể thực hiện một chế độ xem duy nhất hoạt động cho cả hai lớp, thay đổi chính nó một cách thích hợp tùy thuộc vào đối tượng được biểu diễn?