首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >视图控制器中的嵌入式UICollectionView未调用Swift

视图控制器中的嵌入式UICollectionView未调用Swift
EN

Stack Overflow用户
提问于 2016-03-08 08:11:47
回答 2查看 962关注 0票数 0

出于某种奇怪的原因,collectionView没有被调用。我在numberOfItemsInSection和cellForItemAtIndexPath上设置了断点,但它们从未被调用过。下面是我的代码:

代码语言:javascript
复制
class ChannelViewController: UIViewController, UISearchResultsUpdating, UICollectionViewDataSource, UICollectionViewDelegate {

  var channelArray: [ChannelInfo] = []
  var filteredSearchResults = [ChannelInfo]()
  var resultsSearchController = UISearchController(searchResultsController: nil)
  var logosShown = [Bool](count: 50, repeatedValue: false)
  var detailUrl: String?
  var apiKey = ""
  var channel: String!
  var channelForShow: String!
  var task: NSURLSessionTask?

  @IBOutlet var channelCollectionView: UICollectionView!

  override func viewDidLoad() {

    let baseURL = ""
    getJSON(baseURL)
  }


  //MARK: CollectionView

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

    if resultsSearchController.active && resultsSearchController.searchBar.text != ""
    {
      return filteredSearchResults.count
    } else {
      return channelArray.count
    }
  }


 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
      let cell = collectionView.dequeueReusableCellWithReuseIdentifier("ChannelCell", forIndexPath: indexPath) as! ChannelCell
    let channel: String
    if resultsSearchController.active && resultsSearchController.searchBar.text != "" {
      channel = self.filteredSearchResults[indexPath.row].logo
    } else {
      channel = self.channelArray[indexPath.row].logo
    }
    return cell
  }

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    var replacedTitle: String?
    if resultsSearchController.active && resultsSearchController.searchBar.text != "" {

      channelForShow = filteredSearchResults[indexPath.row].channelName

      }
    } else {
      channelForShow = self.channelArray[indexPath.row].channelName
      }
    }
    self.dismissSearchBar()
    performSegueWithIdentifier("channelCollectToShowSegue", sender: self)
  }

}

我还有一个collectionView单元格的子类:

代码语言:javascript
复制
class ChannelCell : UICollectionViewCell {

  @IBOutlet var channelImageView: UIImageView!

}
EN

回答 2

Stack Overflow用户

发布于 2016-03-08 08:19:26

您需要将集合视图的数据源设置为控制器。

1) 在接口构建器中,只需从集合视图拖动到控制器即可。并同时选择委托和数据源。

2) Programatically

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    channelCollectionView.delegate = self
    channelCollectionView.dataSource = self

   let baseURL = ""
    getJSON(baseURL)
  }
票数 1
EN

Stack Overflow用户

发布于 2016-03-08 08:21:33

你设置集合视图的委托和dataSource属性了吗?如果没有,请将您的viewDidLoad更改为以下内容,以便以编程方式设置这两个属性:

代码语言:javascript
复制
override func viewDidLoad() {
    channelCollectionView.delegate = self
    channelCollectionView.dataSource = self
    let baseURL = ""
    getJSON(baseURL)
}

如果不设置委托和dataSource,collectionView将不知道从何处调用适当的方法,如cellForItemAtIndexPath。希望这能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35856630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档