可靠地使用UICollectionView indexPath来访问字典键吗?

时间:2019-01-07 17:56:01

标签: swift dictionary uicollectionview indexpath

我正在尝试使用当前CollectionViewcell的IndexPath来访问字典中的数据。字典的键的类型为Int。 此CollectionView具有“整页”单元格,这意味着每个单元格都占据了整个视图区域,在这里我正在使用水平滚动(启用分页)在单元格之间导航。

字典是:

var dataFromServer: [Int: [VillageFestival]]?

每个CollectionViewCell内部都有一个TableView,我计划在其中具有可变的行数,具体取决于[VillageFestival]中有多少项

但是,在CollectionView cellForItemAt indexPath中,该方法的行为引起了一些麻烦,因为打印indexPath.item或将其设置为我的navigationController的标题,由于我认为dequeueReusableCell的工作方式,它们返回的结果奇怪但“可理解”。

示例:当前索引为0。当我向右滚动时,当前索引现在为2。如果导航到第6页然后又返回上一页,则当前索引指示为3。

为了简化逻辑,我已将字典键从日期更改为字符串,现在又更改为整数了。但是问题仍然存在。 我使用的是全局pageIndex: Int,该全局CollectionView cellForItemAt

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    pageIndex = indexPath.item

    self.navigationController?.navigationBar.topItem?.title = String(pageIndex)

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

    // CollectionViewCell resize to CollectionView Bounds
    cell.tableViewCellOffsets = (UIApplication.shared.statusBarFrame.size.height + (self.navigationController?.navigationBar.frame.height ?? 0.0) , self.tabBarController?.tabBar.frame.height ?? 0)
    return cell

}

在Tableview numberOfRowsInSection中,我使用pageIndex访问字典值。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    guard let festivals = dataFromServer?[pageIndex]  else {return 0}

    return festivals.count

}

使用我当前的代码,该应用程序在某些页面上显示0行,而在其他页面上显示1行。我的猜测是,collectionView的cellForItemAt在tableView的方法之前(也可能在之后?)调用,这使得使用全局pageIndex不可靠...

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这个游乐场,它可能会对您有所帮助:

df['binned'] = pd.qcut(df['value'], 20)

df = df.groupby('binned')['value'].count()

print(df.head())

binned
(0.031127000000000002, 0.03114]    3
(0.03114, 0.031142]                3
(0.031142, 0.031145]               2
(0.031145, 0.031148]               2
(0.031148, 0.031154]               4