2017-01-23 3 views
0

저는 IOS 개발에 익숙하지 않습니다.UICollectionView를 컨테이너에 프로그래밍 방식으로 추가하는 방법은 무엇입니까?

다음은 내가 을 구현하려는 것입니다 - 이것은 코드 jQuery과

를 추가, 두 번째 컨테이너에서 - UICollectionView 를 추가, 최초의 컨테이너에서 - 기본보기 에있는 두 개의 컨테이너를 가지고 나는 지금까지 해왔다.

홈페이지보기 :

class MainViewController:UIViewController { 

let itemView:UIView = { 
    let itemContainerView = UIView() 
    itemContainerView.backgroundColor = UIColor.lightGray 
    let collectionView = CollectionViewController() 
    itemContainerView.addSubview(collectionView.view) 
    itemContainerView.translatesAutoresizingMaskIntoConstraints = false 
    return itemContainerView 
}() 

let tableView:UIView = { 
    let tableContainerView = UIView() 
    tableContainerView.backgroundColor = UIColor.gray 
    tableContainerView.translatesAutoresizingMaskIntoConstraints = false 
    return tableContainerView 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    view.backgroundColor = UIColor.white 
    view.addSubview(itemView) 
    view.addSubview(tableView) 
    setupItemView() 
    setupTableView() 
} 

func setupItemView(){ 
    itemView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    itemView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    itemView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 2/3).isActive = true 
    itemView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 
} 

func setupTableView() { 
    tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    tableView.leftAnchor.constraint(equalTo: itemView.rightAnchor).isActive = true 
    tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1/3).isActive = true 
    tableView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 
} 
} 

CollectionViewController :

class CollectionViewController:UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 

let cellId = "CellId" 
var colView: UICollectionView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let layout = UICollectionViewFlowLayout() 
    layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10) 
    layout.itemSize = CGSize(width: 111, height: 111) 

    colView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) 
    colView.delegate = self 
    colView.dataSource = self 
    colView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId) 
    colView.backgroundColor = UIColor.white 
    colView.translatesAutoresizingMaskIntoConstraints = false 
    self.view.addSubview(colView) 

} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 10 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) 
    cell.backgroundColor = UIColor.brown 
    return cell 
} 

} 

가 내 메인 화면이 두 개의 컨테이너를 가지고 있지만 10 개 수집 세포를 볼 수 없었다 볼 수 있었다.

누구나 올바른 방향으로 안내 할 수 있습니까? 미리 감사드립니다.

내가 처음보기로 MainViewController을 설정 업데이트, 제대로 작동하고. 그러나 프로젝트에서 MainViewController는 초기보기가 아닙니다. 흐름은 다음과 같습니다. 1. 사용자 로그인 2. 버튼이있는 대시 보드가 나타납니다. 3. 버튼을 클릭하면 사용자가 MainViewController로 이동합니다.

여기 내 대시 보드 클래스 뷰가로드 된 후 어느 시점에서 reloadData를 호출하는

class DashboardController: UIViewController{ 

let orderBtn:UIButton = { 
    let button = UIButton(type: .system) 
    button.backgroundColor = UIColor.init(red: 173/255, green: 184/255, blue: 255/255, alpha: 1) 
    button.layer.cornerRadius = 5 
    button.setTitle("Select Item" , for: .normal) 
    button.setTitleColor(UIColor.white, for: .normal) 
    button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16) 
    button.translatesAutoresizingMaskIntoConstraints = false 

    button.addTarget(self, action: #selector(handleOrderNavigation), for: .touchUpInside) 
    return button 
}() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    view.backgroundColor = UIColor.white 
    view.addSubview(orderBtn) 
    setupOrderBtn() 

} 

func handleOrderNavigation() { 
    let mainViewController= MainViewController() 
    let mainViewNavController= UINavigationController(rootViewController: mainViewController) 
    self.present(mainViewNavController, animated: false, completion: nil) 
} 
} 
+0

나는 collectionView가'viewDidLoad'에서 올바른 프레임을 가지고 있는지 의심 스럽습니다. 자동 레이아웃을 사용하거나 나중에 프레임을 설정하십시오. CollectionViewController를'itemView'에 추가 할 때 프레임을 설정하지 않습니다. –

+0

@JamesP 뷰를 슈퍼 뷰 (컨테이너)에 맞추기 위해 autolayout을 어떻게 사용할 수 있습니까? –

답변

0

코드가 올바르게 작동합니다. 여기에 내가 당신의 collectionView 코드 작업에서 얻은 결과물이 있습니다. 당신의 UI의

enter image description here

제안

  1. 확인 뷰 계층 및 참조는 UI의 모든 collectionView 존재가있다.

  2. 메서드가 제대로 호출되는지 확인하십시오. 중단 점을 추가하여 점검하십시오. MainViewController

편집

  1. 당신의 선언은 버튼 액션에서 잘못된 것입니다.
  2. 대신 MainViewController을 사용하십시오. MainViewController
  3. 버튼을 클릭 할 때 제대로 작동하는지 확인하십시오.
+0

MainView를 초기보기로 설정하면 제대로 작동합니다. 그러나 다른보기에서 MainView로 이동할 때 셀을 볼 수 없습니다. –

+0

@ J.GS.Han 다른 VC의 데이터를 메인 VC로 전달하고 있습니까? 당신은 당신의 일의 흐름을 알 수 있습니까? UI에서 실제로 원하는 것/ –

+0

현재 어떤 데이터도 전달하지 않습니다. 흐름 : 사용자가 로그인하면 사용자에게 메인 대시 보드가 표시됩니다. 사용자가 버튼을 클릭하면 사용자가 MainView로 이동합니다. –

관련 문제