在TableView,Swift中返回多个dequeueReusableCells

时间:2015-07-12 08:25:18

标签: ios swift uitableview

我试图解决的问题是为加载的任务返回多个单元格,因为我无法在没有加载全新任务的情况下进行迭代。

每个视图都有一个或多个应该为该特定任务加载的单元格,我似乎无法解决问题。谢谢你的帮助!

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let categoryCells = self.tasks[indexPath.row] as? Task
    var cellChooser: BoredTaskCell!

    if selectedTaskCategory == "Movie"{
    let cell = tableView.dequeueReusableCellWithIdentifier("imdbCell") as! BoredTaskCell!
        cell!.selectionStyle = UITableViewCellSelectionStyle.None
        cellChooser = cell
    }
    else if selectedTaskCategory == "Lifestyle" {
        let emailCell = tableView.dequeueReusableCellWithIdentifier("emailCreatorCell") as! BoredTaskCell!
        emailCell!.selectionStyle = UITableViewCellSelectionStyle.None
        cellChooser = emailCell

    }
    else {
        let emptyCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! BoredTaskCell!
        cellChooser = emptyCell
        emptyCell!.selectionStyle = UITableViewCellSelectionStyle.None
    }

    return cellChooser
}

1 个答案:

答案 0 :(得分:3)

简短的回答是,您无法将一个电话中的两个小区返回cellForRowAtIndexPath。但是为了实现你想要的,改变你构造tableView的方式,所以每个任务都有一个部分,而不是每个任务有一个单元。即使用indexPath.section作为数组的索引。您将需要修改所有表视图数据源方法(例如,因此numberOfSectionsInTableView将返回self.tasks.count)。诀窍来自numberOfRowsInSection,通常应该返回1,但是对于那些需要两个单元格的任务,它应该返回2.然后在cellForRowAtIndexPath中,使用{{1}确定要显示的任务}。然后,如果indexPath.row为0,则使用一个单元格类型(例如imdbcell),如果为1,则使用其他单元格类型(例如,消息单元格)。