Удалить ячейки, если заголовок titleLabel.string / ячейка пуст - PullRequest
0 голосов
/ 11 января 2019

У меня следующая проблема. пример

Если в ячейке нет содержимого, я хочу скрыть эту ячейку. Логика, как видите, позволяет возвращать 5 ячеек:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if(section == 0){
        return 1
    }

    return 5
}

Вот логика фактического представления таблицы:

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

    switch indexPath.section{

    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "CampusGoogleMapsTableViewCell", for: indexPath) as! CampusGoogleMapsTableViewCell

        if let building = self.selectedPOIOffice.room?.building{
            cell.setMarkerForSelectedBuilding(building)
        }

        return cell

    case 1:

        let cell = tableView.dequeueReusableCell(withIdentifier: "CampusTableViewCell", for: indexPath) as! CampusTableViewCell

        let iconLabel: UILabel = cell.iconLabel
        let titleLabel: UILabel = cell.titleLabel

        iconLabel.font = UIFont.fontAwesome(ofSize: 25, style: .solid)


        switch indexPath.row{

        case 0:
            //name
            titleLabel.text = selectedPOIOffice.name
            titleLabel.textColor = UIColor.black
            titleLabel.alpha = 0.8
            iconLabel.text = FontAwesomeIcons.University.getIcon()
        case 1:
            //Phone
            titleLabel.text = selectedPOIOffice.phone
            titleLabel.textColor = HsKAmpusColors.Red
            iconLabel.text = FontAwesomeIcons.Phone.getIcon()
        case 2:
            //email
            titleLabel.text = selectedPOIOffice.email
            titleLabel.textColor = HsKAmpusColors.Red
            iconLabel.text = FontAwesomeIcons.Mail.getIcon()

        case 3:
            //Opening Hours
            if(titleLabel.text == nil){ break}

            titleLabel.text = selectedPOIOffice.openingHours
            titleLabel.textColor = UIColor.black
            titleLabel.alpha = 0.8
            iconLabel.text = FontAwesomeIcons.Clock.getIcon()
        case 4:
            //Location
            titleLabel.text = selectedPOIOffice.room?.roomAndBuildingString ?? ""
            titleLabel.textColor = UIColor.black
            titleLabel.alpha = 0.8
            iconLabel.text = FontAwesomeIcons.PositionMarker.getIcon()
        default:
            break
        }

        return cell

    default:
        return UITableViewCell()
    }
}

Я думаю, я мог бы решить это с помощью простого оператора for, чтобы проверить, есть ли в каждой ячейке какой-либо контент. Можете ли вы помочь мне, пожалуйста, с приложением?

Ответы [ 2 ]

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

"Если в ячейке нет содержимого, я хочу скрыть эту ячейку."

Это предложение показывает базовое недопонимание того, как работают представления таблиц и коллекций. Табличные представления отображают табличные данные из модели данных. Если в вашей модели есть пустые записи, удалите их из модели, прежде чем передавать их в табличное представление.

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

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

Выполните одно из двух действий:

  1. Обновите модель данных, используемую вашими источниками данных, чтобы включить только те данные, которые вы хотите отобразить. Или ...
  2. Реализуйте heightForRowAt, чтобы вернуть 0 для строк, которые вы не хотите видеть.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...