2009-08-10 11 views
5

Tôi muốn xây dựng một ứng dụng Cocoa với một danh sách các mục rất giống với danh sách ToDo của Things.app (see the screencast). Câu hỏi đặt ra là liệu tôi nên sử dụngLàm cách nào để triển khai danh sách tùy chỉnh trong Ca cao?

  1. một TableView,
  2. một CollectionView hoặc
  3. một WebView.

Tôi nghĩ rằng nó có thể hoạt động với tất cả chúng, nhưng cái nào phù hợp nhất với các yêu cầu sau đây?

  • có một danh sách các mục -> 1 cột & nhiều hàng
  • sắp xếp lại bằng cách kéo & thả
  • chọn mục đơn & sử dụng các phím cho những hành động như xóa
  • mở ra một mục: hàng nên mở rộng để hiển thị thêm các trường nhập
  • giao diện tùy chỉnh: góc tròn, bóng, nền dốc

Cho đến nay nghiên cứu của tôi nói rằng TableView có hầu hết các chức năng, nhưng khó tùy chỉnh hơn trong giao diện của nó, CollectionView không kéo thả & (phải không?) Nhưng rất dễ thiết kế và WebView sẽ tốn nhiều công sức để không làm tổn hại đến trải nghiệm người dùng và tôi không thể liên kết trực tiếp mô hình của mình với các trường nhập.

Tôi đang thiếu những ưu điểm và khuyết điểm nào và bạn khuyên bạn nên sử dụng điều gì?

Trả lời

4

WebView không có ý nghĩa. Bạn cũng có thể tạo một ứng dụng web nếu bạn sử dụng một WebView. Một NSCollectionView là nhiều hơn cho lưới như dữ liệu, giống như danh sách TV mỗi giờ.

NSTableView là chỉ có ý nghĩa trong trường hợp này. Tôi đã thực hiện tất cả 5 điểm bullet với một NSTableView mà không có vấn đề gì. Bạn cần phải mở rộng NSTableView và làm một số bản vẽ tùy chỉnh cho giao diện tùy chỉnh. Đó là phần khó nhất.

2
  • mở ra một mục: hàng nên mở rộng để hiển thị nhiều lĩnh vực đầu vào

Bạn cần một outline view. Chế độ xem bảng dành cho các danh sách phẳng.

Lưu ý rằng NSOutlineView là một lớp con của NSTableView, vì vậy tất cả các tính năng xem bảng cũng hoạt động trên chế độ xem phác thảo.

+0

Hm, không mở rộng một hàng trong một NSOutlineView chỉ tiết lộ thêm "subrows"? Tôi muốn thay đổi chiều cao của hàng và đặt nhiều thứ hơn vào nó. Điều này có nghĩa không? – Christian

+0

Vâng. Bạn thực sự có thể sử dụng một khung nhìn bảng, và thực hiện phương thức 'tableView: heightForRow:' delegate mà họ đã thêm hỗ trợ cho Tiger: http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/ Reference.html # // apple_ref/occ/instm/NSObject/tableView: heightOfRow: –

+1

Bạn cũng sẽ cần một ô tùy chỉnh mà bạn có thể chuyển đổi giữa các trạng thái mở rộng khác nhau. –

2

Có những người đã thực hiện việc này rồi. Một trong những mà tôi đã sử dụng thành công là bởi Matteo Bertozzi và có sẵn ở đây: http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/ Có thể mất bit hoạt động xoa bóp để làm cho nó hoạt động đúng cách (đặc biệt là nếu bạn cần hành vi kéo và thả phức tạp), nhưng đối với chức năng cơ bản , chẳng hạn như nhận tiêu đề và mục trong danh sách, nó hoạt động xuất sắc.

Chỉnh sửa: Điều này có come up before và là một câu hỏi phổ biến trong danh sách email ca cao-dev. Here are some other options.

+0

Đó là những tài nguyên tốt nhưng tôi không nghĩ Sidebar là những gì chúng ta đang nói đến ở đây. Đó là phần "xem nội dung chính" của Things, nơi các todos thực sự tồn tại. – jbrennan

+0

@jbrennan touché. Tôi bắt đầu xem screencast được liên kết, thấy thanh bên, và cho rằng đó là điều anh ta muốn. Bạn có thể thực hiện kỹ thuật nó với bất kỳ tùy chọn nào mà anh ta đã hỏi trong câu hỏi. Tôi nghĩ tôi nên đọc câu hỏi đầy đủ trước khi trả lời, eh? :) –

0

Tôi đang tiếp cận cùng một vấn đề trong ứng dụng của mình (với một danh sách lớn tương tự như danh sách Việc cần làm) và tôi nghĩ rằng chế độ xem bảng sẽ có nhiều ý nghĩa ở đây.

Bí quyết là để các ô của bạn ("hàng") mở rộng khi nhấp đúp. Đó là về tất cả những tiến bộ tôi đã thực hiện cho đến nay.

+0

Làm cách nào để bạn mở rộng khi nhấp đúp? – Christian

+0

Đáng buồn thay, tôi chưa hoàn thành công việc đó! Vì vậy, tôi có thể sai ... Tôi có nhiều kinh nghiệm hơn với Cocoa-touch hơn Cocoa, hiện nay. – jbrennan

1

Chỉ cần xem bản thân Things.app bằng cách sử dụng "F-script ở bất kỳ đâu".

Họ đã sử dụng một lớp con của NSTableView được gọi là "DetailTableView" hiển thị các mục todo được cô đặc. Các mục todo được thu gọn được triển khai bằng một ô tùy chỉnh có tên là "ToDoCell", nhưng giao diện mở rộng bạn nhận được khi chỉnh sửa thú vị. Trong trường hợp đó, họ đã có một khung nhìn tùy chỉnh được gọi là "ToDoEditView" được chèn dưới dạng một khung nhìn con của DetailTableView khi được yêu cầu. Tôi cho rằng chế độ xem chỉnh sửa này tạm thời được thêm dưới dạng chế độ xem phụ ở vị trí chính xác và hàng tương ứng của tableview được định lại kích thước tạm thời khi có mặt.

Tất cả đều mang tính đầu cơ .. Tôi rất muốn biết chi tiết về cách thực hiện điều này. Đó là một giao diện người dùng tuyệt vời.

+0

Công việc thám tử giỏi. Tôi đã quên về F-Script. Ngoài ra tốt để kiểm tra là lớp-dump. Và tại sao không kiểm tra thư mục Tài nguyên của gói ứng dụng, để xem ngòi của nó. Đây là tất cả những thứ đã giúp tôi trong quá khứ. – jbrennan

+0

Yeah .. đáng làm tất cả những điều trên đối với những điều .. cho cảm hứng vì nó là một ứng dụng được thiết kế tốt. Ngoài ra .. Tôi nghĩ rằng yêu cầu "mở một hàng" có thể được thực hiện tốt nhất bằng cách sử dụng phương pháp "chèn chế độ xem" được sử dụng bởi Mọi thứ bởi vì điều này sẽ cung cấp cho bạn rất nhiều tính linh hoạt nếu bạn có thể làm cho nó hoạt động. Rõ ràng là các trick (như jbrennan chỉ ra) là nhận được hàng để mở rộng để nhường chỗ cho xem chi tiết. Tôi không có bất kỳ kinh nghiệm thực sự cố gắng này ra mặc dù. –