我正在创建一个用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;
}
我真的不太确定从哪里开始。
答案 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"过滤到收藏夹条目,并将其用于收藏夹部分。