5

내 응용 프로그램에는 여러 섹션이있는 카드/격자 레이아웃이있는 홈 페이지가 있습니다. 따라서 UICollectionView이 여기에서 선택됩니다. 그러나이 카드들은 디자인, 로딩 데이터 및 기능면에서 많이 다릅니다. 그래서 모든 것을 하나의 컨트롤러에 두는 것은 번거롭고 복잡하며 유지하기가 어렵습니다. 그래서 우리는 이것들을 각각 UIViewControllers으로 분리 할 필요가 있다고 생각했습니다. 각각은 일종의 카드를 처리하고 카드 안에 표시 할 contentSize를 계산합니다. 우리의 메인 홈 페이지 컨트롤러는 개의 뷰를 UICollectionView 셀 안에 넣을 책임이 있습니다. collectionViewCell 그 데이터 내부 CollectionView UICollectionviewCells 안에 UIViewcontroller 포함하기

  • 모든 뷰를 갖는다

    summerize하려면

    • HomeViewController는 자체 컨트롤러 클래스에 의해 유지된다. 컨트롤러의
    • 모든 인스턴스는 viewControllers가합니다 (collectionView 레이아웃에 대한 항목 크기로 사용)을 contentSize 계산하기 때문에 자신에 의해 만들어진 모든 아이들에게 added as its children .- Apple Guide
    • The appearance call s를 HomeViewController 내부에있는 및 컨트롤러보기 중로드 할 뷰와 설정할 데이터가 필요합니다.

    제 질문은 설계가 올바르게 선택 되었습니까? 또는 그러한 접근 방식을 구현하기 위해 어떤 접근 방식을 선택했을까요? 우리는 많은 뷰 컨트롤러 (모든 셀에 하나씩)를 생성하기 때문에 메모리 또는 성능에 영향을 줍니까? 그리고 일부 viewController 만 캐시하거나 사용자가 스크롤 할 때 또는 collectionView 셀에 추가 할 시간이되면 해당 셀을로드하려면 해당 셀의 크기를 계산할 때 데이터 및 뷰를 배치하는 동안 어떻게 달라 지는지 알아야합니다. CollectionView 레이아웃.

  • 답변

    1

    나는 당신의 접근법이 타당하고 이론적 인 견지에서 볼 때 데이터와 뷰를 분리하는 것이 합리적이라고 생각한다. 그러나이 경우 UICollectionViewCell 하위 클래스가 기본적으로 viewController 역할을하는 자체 데이터를 구현하는 것을 선호합니다. 이렇게하면 추가 된 viewController와 함께 제공되는 코드가 필요 없기 때문에 코드가 단순 해집니다. 대신 단순히 tableView를 셀의 contentView에 추가 할 수 있습니다. 이것은 나에게 자연스러운 것처럼 보입니다. 홈 뷰 컨트롤러의 collectionView는 셀이 화면을 벗어나서 움직일 때 및 로딩 과정 중에 delegate 호출을 자동으로 처리 할 수 ​​있습니다. 메시지가있는 사람 또는로드해야하는 메시지를 셀에 보낼 필요가 없습니다.이 모든 메시지는 자동으로 처리됩니다. 또한 각 셀의 뷰 라이프 사이클 메서드를 사용하는 것이 중요하다고 생각하지 않으며 셀로드 및 컬렉션 뷰의 일부로 새로 고치는 것보다 덜 직관적입니다. 어느 쪽이든 작동, 행운을 빌어 요!

    +0

    지나치게 잔인하다고 생각하면 완전히 이해합니다. 내가 디자인을 말했을 때 내가 너무 분명하지 않았을 수 있습니다. 데이터로드는 카드마다 다양합니다. 카드에는 tableView 내부 또는 다른 collectionView 또는 복잡한보기 집합이있을 수도 있습니다. 그 tableView 대리자 또는 해당 뷰 내의 다른 뷰와 같습니다. 그래서 나는 "뷰와 그 데이터를 처리하는 Object"가 필요할 것이고, 이것은 나에게 UIViewController의 정의처럼 들린다. 그래서 저는 viewcontroller를 사용하기로 결정했습니다. – akshaynhegde

    +0

    그리고 섹션에 대해 viewcontroller를 사용하면 다른 섹션에 유사한 유형의 카드가 다시 나타날 수 있으므로 각 섹션에있을 수있는 카드의 유형은 서버에서 데이터를 가져올 때까지 정의되지 않습니다. 이러한 정보 (카드 유형, 데이터 또는 표시 방법)는 서버 측에서 정의됩니다. 그래서 나는 모든 종류의 카드를 다루는 방법을 알아야하는 컨트롤러를 만들게 될 것입니다. – akshaynhegde

    +0

    나는 지금 같은 문제에 직면 해있다. View Controller보기의 스크린 샷을 캐시에 저장하고 UICollectioVIewCell의 스크린 샷을 사용한다. 처음에는 고르지 않은 스크롤을 제외한 모든 것이 괜찮다. 셀이 처음로드 될 때의 스크린 샷. 몇 가지 제안이나 개선이 필요합니다. – Koushik

    관련 문제