TableView 中的集合视图显示项目 [VGS.CustumCell collectionView:numberOfItemsInSection:]:发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】TableView 中的集合视图显示项目 [VGS.CustumCell collectionView:numberOfItemsInSection:]:发送到实例的无法识别的选择器【英文标题】:Collection View in TableView Show item [VGS.CustumCell collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance 【发布时间】:2016-11-02 07:53:07 【问题描述】:

我有一个 viewController 有集合和 tableview 和 tableview 单元格它们是另一个集合视图。如果我们不使用 tableview 代码,我的第一个集合工作正常,但是当我们使用 tableview 时。我的应用程序崩溃并显示错误

 [VGS.CustumCell collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance .

请帮助我在 ios 中比较新。任何帮助,将不胜感激。在此先感谢

  override func viewDidLoad() 
            super.viewDidLoad()
             dayArray = ["Mon","Tue","Wed","Thu","Fri","Sat"]
            let identifier = "TimeViewCell"
            collection.registerNib(UINib(nibName: "TimeViewCell", bundle: nil), forCellWithReuseIdentifier: identifier)
            self.timetableTableview.estimatedRowHeight = 79
            self.timetableTableview.rowHeight = UITableViewAutomaticDimension

            self.timetableTableview.setNeedsLayout()
            self.timetableTableview.layoutIfNeeded()

            // Do any additional setup after loading the view.
        


    extension TimeTableController : UICollectionViewDelegate 
        func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
            return 1
        

        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
            return 6
        

        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
            if collectionView.tag == 0 
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier("TimeViewCell", forIndexPath: indexPath) as! TimeViewCell
               cell.daylabel.text = dayArray[indexPath.row] as? String
            if (indexPath.row == 0)
                cell.backgroundColor = UIColor.firstColor()
             else if (indexPath.row == 1)
                cell.backgroundColor = UIColor.secondfColor()
            else if (indexPath.row == 2)
                cell.backgroundColor = UIColor.thirdColor()
            else if (indexPath.row == 3)
                cell.backgroundColor = UIColor.fourthColor()
            else if (indexPath.row == 4)
                cell.backgroundColor = UIColor.fifthColor()
            else if (indexPath.row == 5)
                cell.backgroundColor = UIColor.sixthColor()
            

                   return cell
             else 
              let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Timetable", forIndexPath: indexPath) as! Timetable
               return cell

    
    
    
    extension TimeTableController: UITableViewDelegate,UITableViewDataSource 



         func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
            return 10
        


         func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
            let identifier = "CustumCell"
            var cell: CustumCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustumCell
            if cell == nil 
                var nib:Array = NSBundle.mainBundle().loadNibNamed("CustumCell", owner: self, options: nil)

                cell = nib[7] as? CustumCell
                let identifier = "Timetable"
                cell.timecollectionView.registerNib(UINib(nibName: "Timetable", bundle: nil), forCellWithReuseIdentifier: identifier)

            
            cell.selectionStyle = UITableViewCellSelectionStyle.None
            cell.setNeedsUpdateConstraints()
            cell.updateConstraintsIfNeeded()
            return cell
        

       

【问题讨论】:

【参考方案1】:

我刚刚遇到了类似的问题。我的问题是我在情节提要和 viewDidLoad 中都连接了委托和数据源。这取消了它。我首先尝试从我的 viewController 文件中删除我的委托和数据源连接,但它仍然没有在我的 IBOutlets 中显示内容。但是当我反之亦然时,它就成功了。确保在其中一个中声明它。

我的解决方案:

    Disconnect via storyboard.

    在视图控制器的 viewDidLoad 中声明数据源和委托。

    override func viewDidLoad() 
       super.viewDidLoad()
    
       mainCategoryCollectionView.delegate = self
       mainCategoryCollectionView.dataSource = self
    
    

【讨论】:

【参考方案2】:

您没有为collectionView 声明数据源。将其添加到您已在其中分配委托的扩展程序中。

extension TimeTableController: UICollectionViewDelegate, UICollectionViewDataSource 

别忘了声明所需的功能:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

【讨论】:

先生,我是单独声明的 你能展示那段代码吗?另外,你为什么在委托中声明比dataSource 函数?

以上是关于TableView 中的集合视图显示项目 [VGS.CustumCell collectionView:numberOfItemsInSection:]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从 tableview 传递到 collectionview

设置表格视图单元格的动态高度

在 tableview 中执行 segue 集合视图

为什么Xcode提供Tableview,如果已经存在集合视图来执行任务[重复]

TableViewCell 内的 CollectionView

TableView 仅在屏幕旋转后更新