隐藏某个表格行-Swift 4

时间:2018-10-31 19:55:27

标签: ios swift uitableview tableview

我有

包含5个地方的表。

var places =  ["lat": "42.61964890000001", "country": "United States", "name": "39 Cosgrove St", "lon": "-71.3031683"]
[["lat": "42.6285025", "country": "United States", "name": "138 B St", "lon": "-71.3288776"], ["lat": "42.6334255", "country": "United States", "name": "137 Pine St", "lon": "-71.3321021"], ["lat": "42.6225646", "country": "United States", "name": "98 Marriner St", "lon": "-71.31320219999999"], ["lat": "42.6252232", "country": "United States", "name": "48 Houghton St", "lon": "-71.3243308"], ["lat": "42.61964890000001", "country": "United States", "name": "39 Cosgrove St", "lon": "-71.3031683"]]

enter image description here

我想要

可以防止显示我的表格列表中的当前位置。

我尝试

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

    if places[indexPath.row]["name"] != nil && places[indexPath.row]["name"] != places[activePlace]["name"] {
        cell.textLabel?.text = places[indexPath.row]["name"]
    }

    return cell
}

我明白了

要隐藏的文本,但似乎留下了一个看起来非常糟糕的空白。

enter image description here

我希望

有人可以对此有所启发。

2 个答案:

答案 0 :(得分:2)

if places[indexPath.row]["name"] != nil && places[indexPath.row]["name"] != places[activePlace]["name"] {
    cell.textLabel?.text = places[indexPath.row]["name"]
}

导致返回一个空单元格(如果不是一个出队的单元格),则需要从数据源数组中删除该信息(如果有许多活动单元格,则可以将其保留在另一个var或数组中)并重新加载表格,您可以使用此

places = places.compactMap{ $0["name"] }

从一开始就删除指甲


声明2个类似的临时变量

var tem:[String:String]? // pls create a model don't use array of dics
var activeIndex:Int? 

假设您在一种方法中更改了活动状态,该方法给出了新的活动索引为 neActiveIndex ,那么您应该这样做

if let oldValue = tem && oldActi = activeIndex { // is it the first process 
  places.insert(oldValue,at:oldActi)  // return it to it's place
}

// remove the new index 

tem = places.remove(at: neActiveIndex) // remove also returns the deleted object 
activeIndex = neActiveIndex

然后重新加载表格

如果活动索引没有变化,并且只有1次放映,那么什么也不要保留,只需删除viewDidLoad内的活动索引,表本身将在vc启动时重新加载

答案 1 :(得分:1)

您的想法是错误的。您需要从数据模型中删除条目。

假设您有一个包含所有位置的数组places

您可以将表格视图更改为使用变量tablePlaces作为数据模型

var tablePlaces: [[String, String]]

然后,用您的位置填充tablePlaces,但删除活动位置:

tablePlaces = places
tablePlaces.remove(at: activeIndex)
tableView.reloadData()