Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can´;t在UIView xib中向UICollectionView添加项目 客观的_Ios_Swift_Uiview_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Ios Can´;t在UIView xib中向UICollectionView添加项目 客观的

Ios Can´;t在UIView xib中向UICollectionView添加项目 客观的,ios,swift,uiview,uicollectionview,uicollectionviewcell,Ios,Swift,Uiview,Uicollectionview,Uicollectionviewcell,我想将我的(BusinessViewTableHeader:UIView)放置为tableView标题: tableView.tableHeaderView = BusinessViewTableHeader.instanceFromNib() as! BusinessViewTableHeader 在BusinessViewTableHeader中有一个UICollectionView,它应该在刷卡时显示图像,很像Tinder应用程序 这是我的UIView子类: class Business

我想将我的(BusinessViewTableHeader:UIView)放置为tableView标题:

tableView.tableHeaderView = BusinessViewTableHeader.instanceFromNib() as! BusinessViewTableHeader
在BusinessViewTableHeader中有一个UICollectionView,它应该在刷卡时显示图像,很像Tinder应用程序

这是我的UIView子类:

class BusinessViewTableHeader: UIView {

    @IBOutlet var collectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()
        self.collectionView.delegate = self
        self.collectionView.registerNib(UINib(nibName: "BusinessImageCollectionCell", bundle: nil), forCellWithReuseIdentifier: "BusinessImageCollectionCell")
    }

    class func instanceFromNib() -> UIView {
        return UINib(nibName: "BusinessViewTableHeader", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
    }
    
    ....
}

extension BusinessViewTableHeader: UICollectionViewDelegate, UICollectionViewDataSource {
    ....
}
问题 我有一个自定义UIView xib,其中包含UICollectionView。问题是我无法将任何单元格(项)添加到UICollectionView。我可以将项目添加到放置在UIViewController中的其他UICollectionView中。第一个图像显示UIViewController内UICollectionView的属性,第二个图像显示UIView xib内的UICollectionView

[![UIViewController中的UICollectionView][1]][1] [1]: http://i.stack.imgur.com/zFCeG.png

[![UIView xib中的UICollectionView][2][2] [2]: http://i.stack.imgur.com/jKU6z.png

问题:
为什么我无法将项目添加到UIView xib中的UICollectionView?如何添加?

不支持在xib中添加单元格。如果必须使用xib文件,则需要一个包含UICollectionView单元格的单独xib。故事板可能是更好的解决方案

尚不清楚您试图实现的目标。UICollectionView具有创建使用数据源和委托的标题的特定方法。集合视图适用于在网格布局或其他复杂排列中显示项目

如果您只需要显示行列表,那么UITableViewController可能是一个更简单的选择

无论如何,最好使用故事板而不是xib,并将UICollectionViewController或UITableViewController子类化,而不是子视图

可以在UIViewController或UIView的标识检查器中输入自定义类名:


当UICollectionView位于Nib上时,您不能拥有UICollectionViewCell。您需要做的是将UICollectionViewCell创建为另一个Nib,并将其注册到用于CollectionView的类中

override func awakeFromNib() {
    let nibName = UINib(nibName: "ClassCollectionCell", bundle:nil)
    collectionView.registerNib(nibName, forCellWithReuseIdentifier: "collectionCell")
}
创建一个新的nib,在其中拖动一个UICollectionViewCell,然后在使用UICollectionView的类中执行类似的操作

override func awakeFromNib() {
    let nibName = UINib(nibName: "ClassCollectionCell", bundle:nil)
    collectionView.registerNib(nibName, forCellWithReuseIdentifier: "collectionCell")
}

请记住,您可以将自定义类添加到UICollectionViewCell,以便向其传递动态数据。

Swift 3.0中,使用以下方法注册nib-

let nibName = UINib(nibName: "FruitCell", bundle:nil)
collectionView.register(nibName, forCellWithReuseIdentifier: "CellIdentifier")

在Swift 3.0中

首先创建UIView的文件

import UIKit

class SubCatagoryListView:UIView , UICollectionViewDelegate , UICollectionViewDataSource
{
    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var btnClose: UIButton!
    @IBOutlet weak var subCategoryListCollectionView: UICollectionView!
    @IBOutlet weak var lblTitle: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        subCategoryListCollectionView.register(UINib(nibName: "SubcatagoryListCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "SubcatagoryListCollectionViewCell")
        mainView.layer.cornerRadius = 10.0
        mainView.clipsToBounds = true
    }
    static func subCatagoryListView() -> SubCatagoryListView? {
        let arr = Bundle.main.loadNibNamed("SubCatagoryListView", owner: self, options: nil)
        if arr != nil {
            if arr!.count > 0 {
                if let view = arr![0] as? SubCatagoryListView {

                    return view;
                }
            }
        }

        return nil;
    }





    @IBAction func btnBackgroundTapped(_ sender: UIButton)
    {
         self.removeFromSuperview()
    }
    @IBAction func btnCloseTapped(_ sender: UIButton)
    {
        self.removeFromSuperview()
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SubcatagoryListCollectionViewCell", for: indexPath) as! SubcatagoryListCollectionViewCell

        return cell
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
        let cellsize = CGSize(width: (subCategoryListCollectionView.bounds.size.width/3) - 10, height: 50)
        return cellsize
    }


}
创建新的CollectionViewCell Xib文件后

import UIKit

class SubcatagoryListCollectionViewCell: UICollectionViewCell {

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}
创建两个文件后,我将在我的storybord上加载xib

var subcatagoryXib:SubCatagoryListView?

override func awakeFromNib() {
        super.awakeFromNib()
        if let subcategoryView = SubCatagoryListView.subCatagoryListView()
        {

            subcatagoryXib = subcategoryView
        }

    }
 @IBAction func btnAddInterestTapped(_ sender: UIButton) {

        if subcatagoryXib != nil
        {
            self.subcatagoryXib!.frame = CGRect(x:0, y: 0, width: self.view.frame.width , height: self.view.frame.height)
            self.view.addSubview(self.subcatagoryXib!)
        }

    }

与@Pato的答案相同,但这里有一个更全面的教程,介绍如何从@aestusLabs on Medium在Xib文件中添加自定义UICollectionViewCell。这是一个3-5分钟的阅读,我个人觉得非常有用。它基本上告诉您使用.Xib创建另一个自定义UICollectionViewCell,并将其注册到“级别1”中单元格的
awakeFromNib()


您是否有一个UIViewController通过数据源连接到您的xib并委托给您的UICollectionView?我刚刚用一些代码更新了我的问题。我将UIView子类化,而不是UIViewController。甚至子视图也可以这样做吗?我正在创建一个表视图标题视图。请不要将答案包含在您的问题中。如果答案解决了您的问题r问题,将答案标记为已接受;如果您自己解决了问题,您也可以发布自己的答案。谢谢。我用“目标”更新了我的问题。我不知道如何更清楚地解释它。我附上的图片只是为了表明,当将UICollectionView放置在xib的UIView中时,不可能添加y项或单元格。这是为什么?我该如何管理?我真的想将tableView.tableHeaderView作为xib文件。如果您查看我的代码上面的内容,我就是这么做的。@rilar,您有一个包含UICollectionVIewCell的nib文件吗?愚蠢的错误,我忘了:self.collectionView.dataSource=self。您在哪里正确,thx!如何继续将collectionviewcell的iboutlet从xib连接到collectionview@Pato Salazar的自定义类为什么需要这样做…您是否正在尝试触发集合视图类中存在的方法??。。。