UITableView.reload оставляет старые ячейки в TableView, но скрыты - PullRequest
0 голосов
/ 03 января 2019

У меня есть UITableView, используемый для отображения результатов поиска.Когда я печатаю, я звоню Tableview.reloadData().Визуально все работает.Когда я начинаю печатать, я показываю до 5 совпадений, и когда я опускаюсь ниже, в списке будет правильно отображаться меньше элементов.Вот как создаются ячейки и количество сообщаемых строк.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "placeCell") as! PlaceCell
    if shouldShowSearchResults {
        let place = filteredPlaces[indexPath.row]
        cell.dataSource = place
    } else {
        let place = allPlaces[indexPath.row]
        cell.dataSource = place
    }
    cell.delegate = self
    return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if shouldShowSearchResults {
        vlog?.debug("Number of FILTERED rows in PlacesTableView: \(filteredPlaces.count)")
        return filteredPlaces.count
    } else {
        vlog?.debug("Number of unfiltered rows in PlacesTableView: \(allPlaces.count)")
        return allPlaces.count
    }
}

Поскольку PlaceCell - это пользовательский класс, вот некоторые его детали:

// I've omitted labels, etc.
class PlaceCell: UITableViewCell {

    var dataSource : PlaceView? {
        didSet {
            if let ds = dataSource {
                self.isAccessibilityElement = true
                self.accessibilityLabel = ds.getAccessibilityLabel()

            } else {
                self.isAccessibilityElement = true
                self.accessibilityLabel = nil
            }
        }
    }
    weak var delegate : PlaceCellDelegate? = nil

    override func prepareForReuse() {
        self.isAccessibilityElement = false
        self.accessibilityLabel = nil
        super.prepareForReuse()
    }
}

Я начал замечатьпроблема, когда тесты пользовательского интерфейса с использованием Google Earl Grey начали давать сбой из-за нескольких ячеек с одинаковой меткой доступности.Визуально я не понял, почему это не сработало, так как была видна только одна видимая ячейка, которая соответствовала.

При проверке представлений с использованием Reveal, кажется, что, поскольку количество ячеек падает ниже того, что было максимумом5, старые ячейки все еще находятся в TableView, но скрыты.Таким образом, существует скрытая ячейка, в которой раньше отображались те же данные, что и в другой ячейке.

Есть идеи, почему это происходит?Это работало в течение нескольких месяцев, и я не уверен, что изменилось.

1 Ответ

0 голосов
/ 03 января 2019

Это всегда опасно, когда вы пересекаете иерархию представлений;все может измениться, и, возможно, именно это и произошло здесь.

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

Что-токак:

grey_allOf(grey_accessibilityLabel("Whole Foods Market, East Mayo Boulevard, Phoenix"), grey_sufficientlyVisible(), nil)
...