TableView中的Collectionview - 如何选择项目?

时间:2017-06-09 09:46:28

标签: ios swift uitableview swift3

我在CollectionView中为TableView制作了垂直和水平滚动以及可自定义的单元格。这项工作到目前为止。问题是:我无法选择CollectionView的项目。我认为问题可能与代表出口有关,但我无法找到解决方案。

我对Swift很新,所以也许我忽略了一些显而易见的事情。

我的TableViewController

import UIKit

class HomeVTwoTableViewController: UITableViewController {

    var headers = ["Live", "Friends", "Last commented"]

    @IBAction func cancelBtnPressed(_ sender: UIBarButtonItem) {
        self.dismiss(animated: true, completion: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return headers[section]
    }

    override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){

        view.tintColor = UIColor.black
        let header = view as! UITableViewHeaderFooterView
        if section == 0 {
            header.textLabel?.textColor = UIColor.black
            view.tintColor = UIColor.white
        }
        else {
            view.tintColor = UIColor.groupTableViewBackground
        }
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return headers.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellBig", for: indexPath) as! HomeVTwoTableViewCell

            return cell
        }
        else if indexPath.section == 1 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellSmall", for: indexPath) as! HomeVTwoTableViewCellSmall

            return cell
        }
        else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellSmall", for: indexPath) as! HomeVTwoTableViewCellSmall

            return cell
        }
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        if indexPath.section == 0 {
            return 225.0
        }
        else {
            return 120.0
        }
    }
}

我的TableViewCellCollectionView

import UIKit

class HomeVTwoTableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {

    @IBOutlet weak var collectionView: UICollectionView!

    fileprivate var images = [UIImage]()
    {
        didSet
        {
            self.collectionView.reloadData()
        }
    }

    func setup(for images: [UIImage])
    {
        self.images = images
    }

    override func layoutSubviews() {
        collectionView.dataSource = self
    }

    func numberOfSections(in collectionView: UICollectionView) -> Int
    {
        return communityName.count
    }

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

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("didSelect")
        selectedCommunity = communityId[indexPath.row]
        let home = HomeViewController()
        home.showCommunityDetail()
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        guard let cell =   collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCellBig", for: indexPath) as? HomeVTwoCollectionViewCell else
        {
            fatalError("Cell has wrong type")
        }

       //cell.imageView.image = image
       cell.titleLbl.text = communityName[indexPath.row]
       cell.imageView.downloadedFrom(link :"deleted because privat")

       return cell
    }
}

我的CollectionViewCell

import UIKit

class HomeVTwoCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var titleLbl: UILabel!
}

3 个答案:

答案 0 :(得分:1)

您需要像这样设置delegate和dataSource

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    collectionView.dataSource = self
    collectionView.delegate   = self
}

答案 1 :(得分:0)

我想你错过了这一行。只需添加,它将正常工作collectionView.delegate = self

答案 2 :(得分:0)

您尚未确认集合视图的委托。

override func layoutSubviews() {

        collectionView.dataSource = self
        collectionView.delegate   = self
}