Как отобразить ответное сообщение, если в моем табличном представлении нет данных для отображения? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь отобразить оператор возврата "Нет электронных писем", когда в табличном представлении не отображаются данные электронной почты. Однако это бесполезно. Я использовал неправильную переменную или вызов функции / тип и т. Д.? Как мне решить эту проблему?

Это коды, которые я пробовал, и они продолжали просить меня поместить их в приватную функцию вместо того, чтобы отключить предупреждение. Несмотря на это, я все еще не мог получить ответное заявление, чтобы показать.

func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> Any? {
    if listOfMessages.count == 0 {
        return "There are no messages"
    }

    return (listOfMessages.count)
}

Это предупреждение, которое я получил:

Метод экземпляра 'tableView (: titleForFooterInSection :)' почти соответствует необязательному требованию 'tableView (: titleForFooterInSection :) 'протокола' UITableViewDataSource '

Это новые коды, которые я написал после того, как мне предложили добавить UILabel и установить его свойства в Hidden.

func showLabel() {
    if listOfMessages.count == 0 {
        label.isHidden = true 
    } else {
        label.isHidden = false
    }
}

Тем не менее я не могу получить желаемый результат. Метка осталась скрытой.

Ответы [ 5 ]

2 голосов
/ 30 октября 2019

Добавьте UILabel к представлению с текстом " Нет сообщений ", установите его центр в центре представления или там, где вы хотите его отобразить.

Изначально установите для isHidden свойство true , а если

listOfMessages.count == 0                                                                

, то обновите isHidden до false .

ОБНОВЛЕНИЕ Обновление ответа на основе вашего обновления вопроса: ваша логика isHidden неверна, она должна быть:

func showLabel() {
    if listOfMessages.count == 0 {
        label.isHidden = true 
    } else {
        label.isHidden = false
    }
}

и нене забудьте вызвать эту функцию при обновлении источника данных / перезагрузке таблицы

0 голосов
/ 30 октября 2019

Прежде всего, метод tableView(_: titleForFooterInSection:) будет получать вызов только в том случае, если в tableView.

есть видимые участки, так как во всех есть 0 rows. sections, метод не будет выполняться.

Решение:

Теперь самый простой способ справиться с этим - добавить UILabel в UIViewController, где добавлен ваш tableView.

Теперь вы должны использовать любой вызов API для заполнения listOfMessages array. Теперь, вместо того, чтобы просто перезагрузить таблицу, вам нужно проверить, является ли listOfMessages пустым или нет, и скрыть / показать выше добавленное label соответственно.

Предполагая, что listOfMessages имеет тип [String], вы можете добавить приведенный ниже код в его didSet наблюдатель, например,

var listOfMessages = [String]() {
    didSet {
        label.isHidden = !self.listOfMessages.isEmpty
        tableView.reloadData()
    }
}

Всякий раз, когда есть какое-либо изменение в значении listOfMessages, изменения будут сделаны в соответствии с его текущим состоянием.

0 голосов
/ 30 октября 2019

Создайте расширение UITableView таким образом. вызовите этот метод расширения в вашем UITableView методе делегата.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     items.count == 0 ? tableView.setEmptyMessage("Your message") : 
     tableView.restore()

     return items.count
  }
}

extension UITableView {

    func setEmptyMessage(_ message: String) {
        let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
        messageLabel.text = message
        messageLabel.textColor = .black
        messageLabel.numberOfLines = 0;
        messageLabel.textAlignment = .center;
        messageLabel.font = UIFont.systemFont(ofSize: 17)
        messageLabel.sizeToFit()

        self.backgroundView = messageLabel;
        self.separatorStyle = .none;
   }

   func restore() {
      self.backgroundView = nil
      self.separatorStyle = .singleLine
   }
}
0 голосов
/ 30 октября 2019

вы можете использовать это:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if listOfMessages.count == 0{
        let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
        emptyLabel.text = "There are no messages"
        emptyLabel.textAlignment = NSTextAlignment.center
        self.tableview.backgroundView = emptyLabel
        self.tableview.separatorStyle = .none
        return 0
    } else {
        return listOfMessages.count
    }
}
0 голосов
/ 30 октября 2019
  1. Вы можете создать отдельную ячейку в UITableView, если не получаете данные в условии импорта массива в numberOfRows / numberOfSection, и вернуть эту ячейку.
  2. Вы можете создать отдельное представление и показать либо табличное представление, либоэтот взгляд на условиях.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...