Скрыть определенную строку таблицы - Swift 4 - PullRequest
0 голосов
/ 31 октября 2018

у меня

Таблица, содержащая 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 голосов
/ 31 октября 2018

Ваше мышление не так. Вам необходимо удалить запись из вашей модели данных.

Скажем, у вас есть массив places, который содержит все ваши места.

Вы можете изменить табличное представление, чтобы использовать переменную tablePlaces в качестве модели данных

var tablePlaces: [[String, String]]

Затем, чтобы заполнить таблицу местами своими местами, но удалить активное место:

tablePlaces = places
tablePlaces.remove(at: activeIndex)
tableView.reloadData()
0 голосов
/ 31 октября 2018

Это

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? 

предположим, что вы изменили active в методе, который дает новому активному индексу, скажем, что 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...