在TableViewController - swift中按日期过滤两个不同的单元格

时间:2018-01-22 15:52:05

标签: ios swift uitableview

在我的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()
}

2 个答案:

答案 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:)方法只配置单元格以显示数据模型中的数据。