2009-05-26 32 views
16

có vẻ như tôi đã tìm kiếm trong một thời gian dài và không tìm thấy câu trả lời tuyệt vời, dễ dàng cho vấn đề của tôi.NSTableView với các ô tùy chỉnh

Tôi đang sử dụng XCode với Cocoa/ObjC và đang cố tạo một NSTableView sẽ tải các giá trị từ một NSDictionary/Array vào các phần khác nhau của ô.

Ví dụ: tôi đang cố gắng lấy NSImage, NSTextField và các mục khác vào ô tùy chỉnh (cùng với hình nền). Tuy nhiên, tôi không thể tìm thấy câu trả lời đơn giản về cách tạo điều này ..

Tôi đã mã hóa cho iPhone với UITableViews trong một thời gian và dường như không thể tìm ra cách tương tự với NSTableViews.

Mọi trợ giúp sẽ thực sự tuyệt vời!

Cảm ơn

Dominic

+0

Đây là [cách tiếp cận trực quan] của tôi (http://stackoverflow.com/questions/5884265/how-to-setup-a-nstableview-with-a-custom-cell-using-a-subview) (vẫn còn một số hiển thị các vấn đề) – JJD

Trả lời

26

NSTableView có -tableView:dataCellForTableColumn:row:. Chỉ cần tạo lớp con NSCell của bạn trong ủy nhiệm của bạn và trả về nó nếu bạn cần tùy biến cho hàng đó. Nếu bạn chỉ sử dụng ô tùy chỉnh của bạn cho mỗi hàng trong dạng xem bảng, bạn cũng có thể chỉ cần sử dụng IB để đặt lớp ô tùy chỉnh.

Chế độ xem bảng sẽ sao chép ô khi cần, vì vậy bạn có thể giữ cho ô đó dưới dạng biến mẫu nếu hiệu quả hơn. Các phương thức nguồn dữ liệu hoặc các ràng buộc trên khung nhìn bảng hoạt động như bình thường, chỉ bạn sẽ trả về từ điển được điền của bạn thay vì một chuỗi hoặc một số. Bạn cũng có thể chuyển đối tượng mô hình tùy chỉnh trực tiếp đến tableview, mặc dù bạn sẽ phải làm cho nó có thể sao chép hoặc ghi đè setObjectValue: trong ô của bạn để bọc nó trong NSValue.

Nếu phân lớp NSCell gây khó khăn cho bạn, đó có thể là một chút trải nghiệm học tập. Bắt đầu với -drawWithFrame:inView: để vẽ tất cả các đối tượng tùy chỉnh của bạn và chuyển từ đó khi bạn cần thêm chức năng.

+1

Cảm ơn thông tin! Tôi tìm thấy rất ít tài liệu liên quan đến NSCells. –

+3

Nếu bạn đang thiết kế một ô tùy chỉnh có các biến mẫu, hãy đọc kỹ tài liệu, vì một số phương thức PHẢI được thực hiện như "copyWithZone:". –

+0

Vì vậy, tôi phải thực hiện '-setObjectValue:' trong lớp con NSCell tùy chỉnh của tôi và chỉ trả về giá trị đối tượng cho ô bên phải trong '-tableView: objectValueForTableColumn: row:'? – 11684

3

Một ô chỉ có thể chứa một giá trị đối tượng tại một thời điểm. Tạo một đối tượng mô hình bằng hình ảnh và chuỗi/chuỗi được phân bổ làm thuộc tính và điền vào chế độ xem bảng với thuộc tính đó.

Ngoài ra, trường văn bản là chế độ xem. Mô hình của bạn sẽ không biết gì về bản trình bày của nó — đó là công việc của các lượt xem của bạn.

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