在 DidSelectRowAt 之后保存新数据

发布于 2025-01-18 00:00:08 字数 2069 浏览 3 评论 0原文

我想将新数据保存到我的语言中,以便能够从我的表观视图中选择另一个单元格。现在,默认值在我的表视图上出现,当我点击另一个单元格时,它会删除先前选择的单元格,但是在敲击时我无法选择另一个单元格。

var languageViewModel = LanguageViewModel()
var languageTitles: [LanguageModel] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    return languageCell(indexPath: indexPath)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    var item = languageTitles[indexPath.row]
    let value = item.isSelected
     // Edit isSelected property and refresh table
    for index in languageTitles.indices {
        languageTitles[index].isSelected = false
        languageViewModel.setLanguageTitles(index: index)
    }
    item.isSelected = !value
    tableView.reloadData()
}

private func languageCell(indexPath: IndexPath) -> LanguageTableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: LanguageTableViewCell.identifier, for: indexPath) as! LanguageTableViewCell
    let item = languageTitles[indexPath.row]
    if item.isSelected {
        cell.setupSelected(item)
    } else {
        cell.setup(item)
    }
    return cell
}



 import Foundation
class LanguageViewModel {
    var locales: [Language] = [.tr, .eng, .az] //.ar
    var currentLanguage = UserDefaultsUtil.getDeviceLanguage()
    var languages: [LanguageModel] = []
    func getLanguageTitles() {
        languages = [
            LanguageModel(language: .tr, isSelected: currentLanguage == locales[0].code),
            LanguageModel(language: .eng, isSelected: currentLanguage == locales[1].code),
            LanguageModel(language: .az,  isSelected: currentLanguage == locales[2].code)
        ]
    }
    func setLanguageTitles(index: Int) {
        languages = [
            LanguageModel(language: .tr, isSelected: index == 0),
            LanguageModel(language: .eng, isSelected: index == 1),
            LanguageModel(language: .az,  isSelected: index == 2)
        ]
    }
}

    struct LanguageModel {
    var language: Language
    var isSelected: Bool
}

I want to save new data to my languageTitles to be able to select another cell from my table view. Right now default value is coming on my table view and when I tap on another cell it deletes the previously selected cell but I can not select another when tapped.

var languageViewModel = LanguageViewModel()
var languageTitles: [LanguageModel] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    return languageCell(indexPath: indexPath)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    var item = languageTitles[indexPath.row]
    let value = item.isSelected
     // Edit isSelected property and refresh table
    for index in languageTitles.indices {
        languageTitles[index].isSelected = false
        languageViewModel.setLanguageTitles(index: index)
    }
    item.isSelected = !value
    tableView.reloadData()
}

private func languageCell(indexPath: IndexPath) -> LanguageTableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: LanguageTableViewCell.identifier, for: indexPath) as! LanguageTableViewCell
    let item = languageTitles[indexPath.row]
    if item.isSelected {
        cell.setupSelected(item)
    } else {
        cell.setup(item)
    }
    return cell
}



 import Foundation
class LanguageViewModel {
    var locales: [Language] = [.tr, .eng, .az] //.ar
    var currentLanguage = UserDefaultsUtil.getDeviceLanguage()
    var languages: [LanguageModel] = []
    func getLanguageTitles() {
        languages = [
            LanguageModel(language: .tr, isSelected: currentLanguage == locales[0].code),
            LanguageModel(language: .eng, isSelected: currentLanguage == locales[1].code),
            LanguageModel(language: .az,  isSelected: currentLanguage == locales[2].code)
        ]
    }
    func setLanguageTitles(index: Int) {
        languages = [
            LanguageModel(language: .tr, isSelected: index == 0),
            LanguageModel(language: .eng, isSelected: index == 1),
            LanguageModel(language: .az,  isSelected: index == 2)
        ]
    }
}

    struct LanguageModel {
    var language: Language
    var isSelected: Bool
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人海汹涌 2025-01-25 00:00:08

您的语言模型是构造的,因此当您从struct数组创建新实例时,此实例不再引用数组项目。

因此,您需要更改数组[索引]选定的值。

替换item.iselected =!value to to

languageTitles[indexPath.row].isSelected = !value

Your language model is struct so when you create new instance from struct array, this instance not referencing array item anymore.

Therefore you need to change array[index] selected value.

replace item.isSelected = !value to

languageTitles[indexPath.row].isSelected = !value
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文