Как выполнить конкретные действия в определенной строке представления таблицы в Swift? - PullRequest
0 голосов
/ 24 мая 2018

enter image description here

У меня есть ячейка табличного представления.Я делаю заявление для арендатора в квартире, чтобы сообщить о дефекте помещения.если дефект был исправлен (состояние: выполнено), данные с сервера будут давать дефект.status == 2 (если дефект.статус == 1, процесс еще подлежит ремонту) и отображать кнопки ДА и НЕТ, какрисунок выше.

Я хочу, если он все еще находится в процессе ремонта, вид, который содержит метку «Вы удовлетворены» и кнопку «Да нет», не появится.Ожидаемый результат должен быть таким, как на картинке ниже

enter image description here

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

extension RequestDefectVC : UITableViewDataSource {

     //MARK: Table View Delegate & Datasource

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listDefects.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "defectCell", for: indexPath) as! RequestDefectCell

        let dataDefect = listDefects[indexPath.row]
        cell.defectData = dataDefect

        if dataDefect.status == 2 {
            if let wantToRemoveView = cell.commentResponseView {
                wantToRemoveView.removeFromSuperview()
            }
        }


        return cell
    }

}

но, к сожалению, если этот wantToRemoveView.removeFromSuperview() сработает, он удалит все представления во всех ячейках, даже если статус завершен, как показано на рисунке ниже

enter image description here

Я хочу, чтобы satisfied or not view появилось, если статус завершен, в противном случае он будет удален.как это сделать?

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

вы можете прочитать о UIStackView, что облегчает сокрытие вещей.Если вы не используете stackview и скрываете вещи, пользовательский интерфейс не будет хорошим, так как пространство, используемое скрытым представлением, все еще будет там.Поэтому лучше использовать stackView, когда необходимо скрыть или показать какой-либо вид.

UIStackView: https://developer.apple.com/documentation/uikit/uistackview

0 голосов
/ 24 мая 2018

@ Alexa289 Одно из предложений заключается в том, что вы можете взять высоту ограничения UIView.затем создайте IBOutlet ваших ограничений по высоте и сделайте их постоянными 0, если вы хотите скрыть, иначе назначьте значение для вашей статической высоты.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "defectCell", for: indexPath) as! RequestDefectCell

    let dataDefect = listDefects[indexPath.row]
    cell.defectData = dataDefect

    if dataDefect.status == 2 {
        cell.viewSatisficationHeightConstraints.constant = 50
    } else {
        cell.viewSatisficationHeightConstraints.constant = 0
    }


    return cell
}

Второе предложение заключается в том, что вы можете взять метку и кнопку в поле зрения и встроитьпросмотр стека в вашем представлении (представление содержит метку и кнопку)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "defectCell", for: indexPath) as! RequestDefectCell

    let dataDefect = listDefects[indexPath.row]
    cell.defectData = dataDefect

    if dataDefect.status == 2 {
        cell.viewSatisfication.isHidden = false
    } else {
        cell.viewSatisfication.isHidden = true
    }


    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

   return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {

   return 40
}
0 голосов
/ 24 мая 2018

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

if dataDefect.status == 2 {
    if let wantToRemoveView = cell.commentResponseView {
        wantToRemoveView.isHidden = true
    }
} else {
    if let wantToRemoveView = cell.commentResponseView {
        wantToRemoveView.isHidden = false
    }
}
0 голосов
/ 24 мая 2018

Создайте ограничение высоты для этого вида и подключите его как IBOutlet и управляйте его константой в соответствии с cellForRowAt

self.askViewH.constant = show ? 50 : 0

cell.layoutIfNeeded()

return cell

Я ожидаю, что вы используете автоматические ячейки tableView

...