UITableView 的单元格之间的广告,它使用核心数据和 NSFetchedResultsController
Ads between cells of UITableView which uses Core Data with NSFetchedResultsController
(我已经提到了,但是没有找到我要找的东西)
我需要在 UITableView
的单元格之间展示广告。
上图仅供参考,并未显示我正在使用的应用实际使用的design/data。
UITableView
的正常单元格来自使用 fetchController.object(at: indexPath)
通过 NSFetchedResultsController
的 Core Data
获取请求,而广告单元格则完全来自不同的数据源。
- 由于广告需要显示在实际的 table 视图单元格之间,因此它弄乱了
NSFetchedResultsController
用来从 Core Data
检索对象的 indexPath
获取请求。
- 用户还可以选择从
UITableView
中删除任何实际单元格(非广告单元格),这反过来又可以更改单元格的 indexPath
。
- 单元格中可以显示可变数量的广告,现在假设它是一个常量
c
。
请告诉我是否有有效处理所有这些极端情况的方法,最好不要更改 fetchController.object(at: indexPath)
.
中使用的 indexPath
对象
您可以在 table 视图单元格中添加一个标记 class,告诉您是否显示广告:
class MyTableViewCell: UITableViewCell {
var showAd: Bool = false {
didSet {
// `adView` here being either an IBOutlet from the XIB,
// or a programatically created view, depending on how
// you designed the cell
adView.isHidden = !showAd
}
}
}
完成上述内容后,剩下的就是存储一个 数组,您要在其中展示广告,并相应地更新单元格:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ...
cell.showAd = adIndices.contains(indexPath.row)
return cell
}
(我已经提到了
我需要在 UITableView
的单元格之间展示广告。
上图仅供参考,并未显示我正在使用的应用实际使用的design/data。
UITableView
的正常单元格来自使用 fetchController.object(at: indexPath)
通过 NSFetchedResultsController
的 Core Data
获取请求,而广告单元格则完全来自不同的数据源。
- 由于广告需要显示在实际的 table 视图单元格之间,因此它弄乱了
NSFetchedResultsController
用来从Core Data
检索对象的indexPath
获取请求。 - 用户还可以选择从
UITableView
中删除任何实际单元格(非广告单元格),这反过来又可以更改单元格的indexPath
。 - 单元格中可以显示可变数量的广告,现在假设它是一个常量
c
。
请告诉我是否有有效处理所有这些极端情况的方法,最好不要更改 fetchController.object(at: indexPath)
.
indexPath
对象
您可以在 table 视图单元格中添加一个标记 class,告诉您是否显示广告:
class MyTableViewCell: UITableViewCell {
var showAd: Bool = false {
didSet {
// `adView` here being either an IBOutlet from the XIB,
// or a programatically created view, depending on how
// you designed the cell
adView.isHidden = !showAd
}
}
}
完成上述内容后,剩下的就是存储一个
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ...
cell.showAd = adIndices.contains(indexPath.row)
return cell
}