具有多个部分的表,具体取决于切换

时间:2016-04-20 01:34:40

标签: ios swift uitableview

我正在创建一个用plist中的值填充的tableview。

我还在表格中有一个收藏夹部分,它将从同一个plist填充,这取决于plist中的布尔值是true还是false。

我遇到的问题是每当tableview刷新时,单元格会更改为数组中的其他值。

这是我的手机代码:

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

    //Define cell in view controller
    let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as UITableViewCell

    //Get information from routeArrayionary
    if let inforouteArray = self.routeArray![indexPath.row] as? NSDictionary,
        let nameString = inforouteArray["name"], let nameCode = inforouteArray["code"], let isFav = inforouteArray["isFavorite"] {
        if (indexPath.section == 0) {
            if (isFav as! Bool == true) {
                cell.textLabel?.text = "\(nameString) (\(nameCode))"
            }
        } else {
            cell.textLabel?.text = "\(nameString) (\(nameCode))"

        }
    }
    return cell

}

移动行:

if (sourceIndexPath != destinationIndexPath) {
    if (destinationIndexPath.section == 0) {
        self.routeArray![sourceIndexPath.row].setValue(true, forKey: "isFavorite")
    } else {
        self.routeArray![sourceIndexPath.row].setValue(false, forKey: "isFavorite")

    }
    if(self.routeArray!.writeToFile(self.path!, atomically: true) == true) {
        NSLog("Successfully saved favorites")
    }

    self.tableView.reloadData()
}

以及我如何计算一个部分中的行数:

if (section == 0) {
    var i: Int = 0
    for route in routeArray! {
        if (route["isFavorite"] as! Bool == true) {
            i += 1
        }
    }

    return i

} else {
    return numRows!
}

RouteArray结构:

{
    code = **;
    color = 0000FF;
    isFavorite = 0;
    name = “**”;
    routeId = 55;
    weight = 0;
},
{
    code = **;
    color = DDDDDD;
    isFavorite = 0;
    name = “**”;
    routeId = 57;
    weight = 1;
}

我真的不太确定从哪里开始。

1 个答案:

答案 0 :(得分:0)

基本上,在收藏夹部分,您的索引是错误的。我们假设您已将项目0,5和7添加到收藏夹部分。 iOS将使用indexPath.section == 0和indexPath.row = 0,1,2调用cellForRowAtIndexPath。您需要将0,1,2映射到0,5,7 - 您不会这样做。 " if(isFav as!Bool == true)"对于第1行和第2行不会成立,没有其他分支,因此您将单元格文本取消设置。由于细胞被重复使用,因此细胞文本保留了之前使用的任何内容。

你可以做的最好的事情就是创建第二个阵列" favoriteRouteArray"过滤到收藏夹条目,并将其用于收藏夹部分。