Горячий сделать UIAlert с данными из UITableViewCell? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть приложение конвертера с tableView с ячейками, в которых содержатся результаты преобразования.

Например, вы ввели 5 километров, а в tableView ячейках для счетчиков показано 5000 и т. Д.

Я хочу сделать UIAlert с полным результатом при нажатии на одну из ячеек.Так что я хочу, чтобы мой результат для метров и я нажимаю на ячейку метров.Как я мог сделать это?

Я попытался создать дополнительные переменные и подключить их к Alert, но значение по-прежнему показывает не ячейку, которую я выбираю, а первую ячейку в таблице, которая показывает на данный момент ...

У кого-нибудь есть идеи?


let cell1 = tableView.dequeueReusableCell(withIdentifier: "resultCell") as! ResultTableViewCell

let item = converter[indexPath.row]
cell1.nameResult.text = item.title
cell1.subtitleResult.text = item.subtitle

//MARK: - Форматтер для результатов
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 3
formatter.maximumFractionDigits = maxdigits



if converterVal == NSLocalizedString("Километр", comment: "") {

    cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: inputValue).multiplying(by: NSDecimalNumber(value: item.kfKilometer)))
    resultVar = cell1.labelResult.text!
    resultName = cell1.nameResult.text!

    return cell1

} else if converterVal == NSLocalizedString("Метр", comment: "") {

    cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: inputValue).multiplying(by: NSDecimalNumber(value: item.kfMeter)))
    resultVar = cell1.labelResult.text!
    resultName = cell1.nameResult.text!

    return cell1

} else {

    cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: 0))
    return cell1        
}

nameResult - это имя преобразованного значения, а labelResult - это результат преобразования, и для каждой ячейки у меня есть оператор if else.


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if tableView == self.tableView2 {
        let alertController = UIAlertController(title: NSLocalizedString("\(inputValue) \(detailLabel) is:", comment: ""), message: NSLocalizedString("\(resultVar) \(resultName)", comment: ""), preferredStyle: .alert)


        let OKAction = UIAlertAction(title: NSLocalizedString("Спасибо", comment: ""), style: .default) { action in
            // ...
        }
        alertController.addAction(OKAction)

        self.present(alertController, animated: true) {
            // ...
        }
    }

//    tableView.deselectRow(at: indexPath, animated: true)

}

И я хочу более внимательно показать эти ярлыки в Alert, но только для каждой ячейки, которая должна быть своей ...

1 Ответ

0 голосов
/ 29 сентября 2018

Может быть, вам нужно изменить свой метод, как показано ниже

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if tableView == self.tableView2 {
       // get your selected row data 

        let item = converter[indexPath.row]
         //use item.title or item.subtitle instead of label

    let alertController = UIAlertController(title: NSLocalizedString("\(inputValue) \(detailLabel) is:", comment: ""), message: NSLocalizedString("\(resultVar) \(resultName)", comment: ""), preferredStyle: .alert)


    let OKAction = UIAlertAction(title: NSLocalizedString("Спасибо", comment: ""), style: .default) { action in
        // ...
    }
    alertController.addAction(OKAction)

    self.present(alertController, animated: true) {
        // ...
    }
    }

}

Позвольте мне кое-что объяснить: cellForRowAt indexPath этот метод создает ячейку и заполняет данные, что вы передаете в нее.поэтому, если вы назначите значение resultVar в этом методе, это даст вам неправильное значение.

didSelectRowAt вызывается при нажатии на строку ячейки, поэтому присвойте значение resultVar в этом методе и выполните ваши действия иливсе, что вы хотите

Вместо доступа к ячейке, когда вы нажимаете на строку

if let cell = tableView.cellForRow(at: indexPath) as? YourCellClass {
     // access your cell label and get values
     print(cell.titleLable.text!)

}
...