2017-01-23 94 views
0

我是IOS開發新手。如何以編程方式將UICollectionView添加到容器?

以下是我想要實現 什麼 - 已在主視圖 兩個容器 - 在第一個容器中,加入一個UICollectionView - 在第二個容器中,加入一個UITableView

這是代碼我迄今爲止所做的。

主視圖:

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。

這裏是我的儀表盤類

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使視圖適合superview(容器)? –

回答

0

您的代碼正常工作。這裏是我從你的collectionView代碼工作中得到的輸出。

enter image description here

建議

  1. UI的檢查視圖層次,看看是否有任何的CollectionView出現在你的UI。

  2. 確保您的方法正確調用。通過添加中斷點來檢查它。

編輯

  1. MainViewController您聲明是錯誤的按鈕操作。
  2. 而不是禮物MainViewController使用推送到MainViewController
  3. 請確保您的按鈕操作方法正確調用按鈕單擊。
+0

如果我將MainView設置爲初始視圖,如您所說,它工作正常。但是當我從另一個視圖導航到MainView時,我看不到這些單元格。 –

+0

@ J.GS.Han您是否將其他VC的數據傳遞給主VC?你能告訴你工作的流程嗎?實際上你想在你的UI/ –

+0

我現在沒有傳遞任何數據。 流程如下: 用戶登錄後,用戶將看到主儀表板。如果用戶點擊一個按鈕,用戶將被導航到MainView。 –

0

嘗試在某一點上看法加載後調用reloadData

相關問題