在我的TableViewController中,我有两种不同类型的自定义单元格。 一个显示来自我的网页的数据,另一个显示来自TwitterKit的推文。
目前,我首先显示来自网页数据的所有单元格,然后所有推文都会在此之后显示。
如何让TableViewController按日期过滤单元格并根据日期显示它们?
以下是我现在所做的事情:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "articleCell", for: indexPath) as! articleTableViewCell
let cellTwitter = tableView.dequeueReusableCell(withIdentifier: "twitterCell", for: indexPath) as! CustomTableViewCell
// Configure the cell...
if indexPath.row < feedItems.count {
let item: LocationModel = feedItems[indexPath.row] as! LocationModel
// STUFF HERE FROM THE WEB
return cell
} else {
let tweet = tweetData[(indexPath.row - feedItems.count)]
// STUFF HERE TWEETS
return cellTwitter
}
}
编辑数据如何存储
func itemsDownloaded(items: NSArray) {
feedItems = items
self.tableView.reloadData()
}
func twitterDownloaded(items: [Any]) {
tweetData = TWTRTweet.tweets(withJSONArray: items)
tableView.reloadData()
}
答案 0 :(得分:0)
你应该有一个视图数据来保存你的数据类型和数据本身
enum DataType {
case feed
case tweet
}
class ViewData {
var type: DatTypeEnum //enum of your cell types feed, tweet
var feddData: FeedData?
var tweetData: TweetData?
}
在viewDidLoad或init方法中将数据转换为ViewModel数组
var viewData: [ViewData] = convert2ViewModel(/*source*/)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "articleCell", for: indexPath) as! articleTableViewCell
let cellTwitter = tableView.dequeueReusableCell(withIdentifier: "twitterCell", for: indexPath) as! CustomTableViewCell
// Configure the cell...
if (viewData[indexPath.row].type == .feed {
let item: LocationModel = feedItems[indexPath.row] as! LocationModel
// STUFF HERE FROM THE WEB
return cell
} else {
let tweet = viewData[(indexPath.row)]
// STUFF HERE TWEETS
return cellTwitter
}
}
可能有一些语法错误,抱歉...
答案 1 :(得分:0)
你不“过滤细胞”。
表格视图显示数据模型中的内容。
tableView(_:cellForRowAt:)
方法构建显示数据模型内容的单元格。
您需要确定数据模型的外观。如果您有两组单元格,一组用于网页中的数据,另一组用于TwitterKit
中的数据,您可能需要考虑将每个单元格放入表格视图的不同部分。
当您从网页和TwitterKit
收到数据时,过滤并将其排序为您想要的表单,并将其安装在您用于表格视图的数据模型中。然后让您的tableView(_:cellForRowAt:)
方法只配置单元格以显示数据模型中的数据。