5

Trong ứng dụng của tôi, tôi có một trang chủ có Giao diện Thẻ/Lưới với nhiều phần. Vì vậy, UICollectionView là sự lựa chọn hiển nhiên ở đây. Nhưng những thẻ này rất khác nhau về thiết kế, tải dữ liệu và chức năng của chúng. Vì vậy, đặt tất cả những người trong một bộ điều khiển duy nhất sẽ là cồng kềnh, phức tạp và khó khăn để duy trì. Vì vậy, chúng tôi nghĩ rằng chúng ta cần phải tách riêng chúng ra thành UIViewControllers của riêng chúng. Mỗi xử lý một loại thẻ và tính toán nội dung của nó Kích thước được hiển thị bên trong một thẻ. Bộ điều khiển trang chủ chính của chúng tôi chỉ chịu trách nhiệm đặt các chế độ xem viewcontroller này trong các ô UICollectionView.Nhúng UIViewcontrollers bên trong UICollectionviewCells

Để summerize,

  • Một HomeViewController trong đó có một CollectionView
  • Mỗi cái nhìn bên trong collectionViewCell và dữ liệu của nó được duy trì bởi bộ điều khiển Lớp riêng của mình.
  • Tất cả các trường hợp của bộ điều khiển là bên trong HomeViewController và added as its children .- Apple Guide
  • The appearance call s cho tất cả các trẻ em viewControllers được thực hiện bởi chính chúng ta kể từ đó, contentSize (nào được sử dụng như kích thước mục cho bố trí collectionView) tính các khung nhìn bộ điều khiển cần xem và tải dữ liệu cần thiết lập.

Câu hỏi của tôi là, đây có phải là lựa chọn thiết kế đúng không? Hoặc bạn đã chọn cách tiếp cận nào để triển khai màn hình như vậy? Vì chúng ta tạo ra rất nhiều viewControllers (một cho mỗi ô), điều này có ảnh hưởng đến bộ nhớ hay hiệu suất không? Và nếu tôi muốn cache chỉ một số viewControllers hoặc load chúng khi người dùng cuộn hoặc khi thời gian của nó thêm nó vào ô collectionView, làm thế nào để tôi đi về nó khi tính toán kích thước của ô đó phụ thuộc vào dữ liệu và khung nhìn trong khi đặt ra khỏi bố cục CollectionView.

Trả lời

1

Tôi nghĩ rằng cách tiếp cận của bạn là hợp lệ và từ quan điểm lý thuyết, có ý nghĩa tách riêng một khung nhìn khỏi dữ liệu của nó. Tuy nhiên, trong trường hợp này, tôi muốn lớp con UICollectionViewCell triển khai dữ liệu riêng của mình, về cơ bản hoạt động như một viewController. Điều này sẽ đơn giản hóa mã của bạn một chút vì bạn không cần thêm viewControllers và mã đi kèm với chúng; thay vào đó bạn có thể chỉ cần thêm tableView của bạn vào contentView của ô. Điều này có vẻ tự nhiên hơn với tôi, như sau đó bạn có thể có bộ sưu tập của HomeViewController collectionView tự động xử lý gọi các đại biểu của nó khi các tế bào được di chuyển ra khỏi màn hình và bật, và trong quá trình tải. Bạn sẽ không cần phải gửi tin nhắn đến các ô về họ là ai hoặc khi nào họ nên tải, tất cả điều này sẽ tự động được xử lý cho bạn. Ngoài ra, tôi thực sự không nghĩ rằng có các phương pháp vòng đời xem trên mỗi ô là có giá trị và ít trực quan hơn việc tải và làm mới ô như một phần của collectionView. Dù bằng cách nào hoạt động, chúc may mắn!

+0

Tôi hoàn toàn hiểu khi bạn nói nó có vẻ giống như một overkill. Có thể tôi đã không quá rõ ràng khi tôi nói thiết kế t, tải dữ liệu khác nhau rất nhiều từ thẻ vào thẻ. Một thẻ thậm chí có thể có một tableView bên trong, hoặc một collectionView khác, hoặc một số tập hợp các khung nhìn phức tạp. Giống như các đại biểu tableView hoặc các Chế độ xem khác bên trong các chế độ xem đó. Vì vậy, tôi sẽ cần một "một đối tượng mà xử lý một cái nhìn và dữ liệu của nó", mà âm thanh như một định nghĩa của một UIViewController với tôi. Vì vậy, tôi quyết định sử dụng một viewcontroller. – akshaynhegde

+0

Và về việc sử dụng một viewcontroller cho một phần, có thể có loại thẻ tương tự một lần nữa bật lên trong phần khác nhau, vì vậy loại thẻ có thể có trong mỗi phần không được xác định cho đến khi tôi lấy dữ liệu từ máy chủ. Các thông tin này (loại thẻ, dữ liệu hoặc cách nhìn) được xác định ở phía máy chủ. Vì vậy, tôi sẽ kết thúc việc tạo ra một bộ điều khiển nên biết làm thế nào để xử lý tất cả các loại thẻ. – akshaynhegde

+0

Tôi đang đối mặt với cùng một vấn đề bây giờ, những gì tôi đã làm là chụp ảnh màn hình của View Controller để lưu nó vào bộ nhớ cache và sử dụng ảnh chụp màn hình đó trong UICollectioVIewCell mọi thứ đều tốt ngoại trừ cuộn cuộn trong lần đầu tiên. ảnh chụp màn hình khi ô tải lần đầu tiên. Cần một số gợi ý hoặc cải tiến – Koushik

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