gpt4 book ai didi

swift - 如何使用 Swift 将 tableview 单元格选定的索引数据存储到 Userdefault 中并在上一页 tableview 单元格中使用它?

转载 作者:行者123 更新时间:2023-11-30 10:44:05 24 4
gpt4 key购买 nike

我的场景是,我有两个 View Controller VC1 和 VC2。在 VC1 内部,我有一个表格 View ,其中有两个单元格用于“来源”和“目标”翻译语言 UI。这里“从单元格”或“到单元格”单击可在表格 View 中显示常见的 VC2 语言列表。基于语言选择,我需要将选择数据存储到 VC1,并需要分配 VC1 表格 View 单元格标签(立即更新)。

下面的代码我正在使用,还需要简化如何在 TableView 单元格中使用 VC1 中的存储值。

这是我的代码

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if language_segment.selectedSegmentIndex == 0 { //from

selectedFromLanguage = filteredLanguages[indexPath.row]
fromLanguageID = selectedFromLanguage?.icon
fromLanguageName = selectedFromLanguage?.languageName
fromLanguageCode = selectedFromLanguage?.languageCode

} else { //to

selectedToLanguage = filteredLanguages[indexPath.row]

toLanguageName = selectedToLanguage?.icon
toLanguageName = selectedToLanguage?.languageName
toLanguageCode = selectedToLanguage?.languageCode
}
tableView.reloadData()
}

@IBAction func close_Click(_ sender: Any) {

// From Language Responses
UserDefaults.standard.set(fromLanguageID ?? "",, forKey: "icon")
UserDefaults.standard.set(fromLanguageName ?? "", forKey: "fromLanguageName")

}

最佳答案

您应该使用委托(delegate)模型来通知第一个 VC 语言已更改。

这是一个例子。首先定义一个委托(delegate)接口(interface),例如:

protocol LanguageSelectionDelegate
{
fun languageSelector(didSetFromLanguage: Int)
fun languageSelector(didSetToLanguage: Int)
}

您可以定义一个同时传递这两个选项的方法(当在第二个 VC 上单击“确定”时),也可以像这里一样使用两个方法,当用户单击一个选项时就会调用这两个方法(您使用的方法可能取决于是否存在是一个“取消”选项,它关闭第二个 VC 而不应用更改)。

使您的第一个 VC 符合此协议(protocol),并添加一个实现。在该实现中,您可能只需要重新加载 TableView 数据 - 无需我不知道的代码。例如。 (仅显示“from”语言更改,但“to”几乎相同):

class FirstVC: UITableViewController, LanguageSelectionDelegate
{
private var fromLanguageId = UserDefaults.standard.integer(forKey: "fromLanguage")
fun languageSelector(didSetFromLanguage languageId: Int)
{
UserDefaults.standard.set(languageId, forKey: "fromLanguage")
fromLanguageId = languageId
tableView.reloadData()
}
}

这假设您的 cellForRowAt 实现将根据 languageId 填充单元格。您需要在第二个 VC 中存储委托(delegate)引用,例如:

public val delegate: LanguageSelectionDelegate!

并确保在第一个 VC prepareFor(segue) 函数中初始化它,例如:

let vc2 = segue.destination as! SecondVC
vc2.delegate = self

第二个 VC 的 didSelectRowAt 将变为:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{
tableView.deselectRow(at: indexPath, animated: true)
if language_segment.selectedSegmentIndex == 0
{ //from
selectedFromLanguage = filteredLanguages[indexPath.row]
delegate.languageSelector(didSetFromLanguage: selectedFromLanguage.id)
}
else
{ //to
selectedToLanguage = filteredLanguages[indexPath.row]
delegate.languageSelector(didSetToLanguage: selectedToLanguage.id)
}
}

无需从此函数调用reloadData()。请注意,您实际上只需要处理该语言的唯一 ID(我在这里假设为 int),而不是保存有关它的所有详细信息。

关于swift - 如何使用 Swift 将 tableview 单元格选定的索引数据存储到 Userdefault 中并在上一页 tableview 单元格中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56170471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com