首页 > 解决方案 > 如何在 didSelectRow 中保存选择?

问题描述

我想从 tableview 保存选择并选择行,所以我可以将它传递给 UILabel。我正在尝试将一个字符串保存为引用并保存选定的行,然后我将引用传递给标签,但它不起作用。这是我的代码设置我的 cellForRow 和 didSelectRow。当我尝试在我的 reloadVC 函数中传递它时,我的 saveSelectedClass 和 saveSelectedSubject 不起作用,而在我的 didSelectRow 中已经保存了它

    @IBOutlet weak var classContainer: UIView!
    @IBOutlet weak var classNameLbl: UILabel!
    @IBOutlet weak var classTableView: UITableView!
    @IBOutlet weak var classDownArrowIV: UIImageView!

    @IBOutlet weak var subjectContainer: UIView!
    @IBOutlet weak var subjectNameLbl: UILabel!
    @IBOutlet weak var subjectDownArrowIV: UIImageView!
    @IBOutlet weak var subjectTableView: UITableView!

    var selectedIndexPath = IndexPath(row: 0, section: 0)
    var selectedClass: String?
    var selectedSubject: String?

    func reloadVC() {
        ClassService.shared.getClassId { result in
            switch result {
            case .success(let classes):
                self.classes.removeAll()
                self.classes = classes
                self.classNameLbl.text = self.selectedClass
                self.selectedId = classes.first?.id
            case .failure(let error):
                print(error)
                break
            }
        }

        ClassService.shared.getSubjectData(classId: selectedId ?? "", date: selectedDay ?? "") { result in
            switch result {
            case .success(let subjects):
                self.subjects.removeAll()
                self.subjects = subjects
                self.subjectNameLbl.text = self.selectedSubject
            case .failure(let error):
                print(error)
            }
        }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if tableView == classTableView {
            if indexPath == selectedIndexPath {
                selectedClass = classes[indexPath.row].name
                tableView.reloadData()
            }
        }

        if tableView == subjectTableView {
            if indexPath == selectedIndexPath {
                selectedSubject = subjects[indexPath.row].subjectName
                tableView.reloadData()
            }
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if tableView == classTableView {
            let cell = tableView.dequeueReusableCell(withIdentifier: "classCellId", for: indexPath)
            let className = classes[indexPath.row]
            cell.textLabel?.text = className.name
            return cell
        }

        if tableView == subjectTableView {
            let cell = tableView.dequeueReusableCell(withIdentifier: "subjectCellId", for: indexPath)
            let item = subjects[indexPath.row]
            cell.textLabel?.text = item.subjectName
            return cell
        }

        return UITableViewCell()
    }

   extension GASViewController: JKCalendarDelegate {
    func calendar(_ calendar: JKCalendar, didTouch day: JKDay) {
        selectedDate = day
        selectedDay  = selectedDate.date.toString()

        reloadVC()
        calendar.reloadData()
    }
}

标签: iosswiftuitableview

解决方案


推荐阅读