因此,对于每一条推文,Twitter都会统计它的印象,也就是它出现了多少个屏幕。不需要任何互动来计算印象,只需显示推文即可。
如果Twitter feed是一个UITableView
,而每条tweet都是一个UITableViewCell
,那么如何实现这一点呢?
最初,我尝试在tableView(_:cellForRowAt:)
方法中添加一个印象,如下所示:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath) as! TweetCell
let tweet = feed[indexPath.row]
cell.configure(with: tweet)
addImpression(for: tweet) // adding impression here...
return cell
}
但是,当用户滚动过去或重新加载UITableView
时,可能会为每个单元格调用此方法多次,这将导致添加多个印象,而不是只添加一个印象。
我认为这可能是因为每个cell只运行一次代码块。真的有这样的事情吗?
谢谢。
发布于 2018-12-17 01:55:42
假设您有如下所示的tweet结构(具有hasSeen布尔值):
struct Tweet {
var user: String
var text: String
var hasSeen: Bool
var date: Date
// and etc.
}
然后修改cellForRowAt
方法,如下所示:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath) as! TweetCell
let tweet = feed[indexPath.row]
if tweet.hasSeen == false {
addImpression(for: tweet)
tweet.hasSeen = true
}
cell.configure(with: tweet)
return cell
}
对于每条tweet,您要检查该tweet之前是否显示过。如果没有显示,则添加一个印象;如果显示,则不添加。
这是我想尝试的一种方法。如果这对你有用,请让我知道。
https://stackoverflow.com/questions/53804429
复制相似问题