如何在 TableView 中保存数据?
How can I save data inside a TableView?
在我的应用程序中,我有一个标签,当用户点击视图或摇动 iPhone 时,它会随机更改引号。如果用户双击同一个视图,它应该将引用保存在 TableView 中。
一开始我以为可以用CoreData,但是他不行。现在我正在使用 UserDefaults,现在如果我双击视图,报价将被保存,但一次只能保存一个。我想要做的是他创建一个列表,其中包含用户双击的所有引号。
这是 doubleTap 对象中的代码:
let savedQuotes = UserDefaults.standard.setValue(quoteLabel.text!, forKey: "saveQuotes")
if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){
print(printSavedQuotes)
}
下面是我在 TableVIew 中使用的代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
_ = UserDefaults.standard.string(forKey: "saveQuotes")
return 15
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)
if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){
cell.textLabel?.text = "\(printSavedQuotes)"
}
这是问题的图片。
请在Swift中了解Collections
。你要找的是 Array
类型。表示按特定顺序存储的元素集合的类型。
文档:
https://developer.apple.com/documentation/swift/array
现在当你学习如何将东西保存到数组中时,你可以将这个数组连接到你的tableView
。
最基本的设置是:
var quotes: [String] = ["quote1", "quote2", "quote3"]
在numberOfRowsInSection
你returnquotes.count
并且在 cellForRow
你的 cell.textLabel.text == quotes[indexPath.row]
按照下面的方法尝试..
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let savedQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
return saveQuotes.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)
let saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
cell.textLabel?.text = saveQuotes[indexPath.row]
return cell
}
func saveQuote(){
var saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
saveQuotes.append(quoteLabel.text!)
UserDefaults.standard.set(saveQuotes, forKey: "saveQuotes")
print(saveQuotes)
}
这只是一个示例,推荐的方法是使用 sqlite 或 core-data 来存储持久数据而不是 UserDefaults。
在我的应用程序中,我有一个标签,当用户点击视图或摇动 iPhone 时,它会随机更改引号。如果用户双击同一个视图,它应该将引用保存在 TableView 中。 一开始我以为可以用CoreData,但是他不行。现在我正在使用 UserDefaults,现在如果我双击视图,报价将被保存,但一次只能保存一个。我想要做的是他创建一个列表,其中包含用户双击的所有引号。
这是 doubleTap 对象中的代码:
let savedQuotes = UserDefaults.standard.setValue(quoteLabel.text!, forKey: "saveQuotes")
if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){
print(printSavedQuotes)
}
下面是我在 TableVIew 中使用的代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
_ = UserDefaults.standard.string(forKey: "saveQuotes")
return 15
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)
if let printSavedQuotes = UserDefaults.standard.string(forKey: "saveQuotes"){
cell.textLabel?.text = "\(printSavedQuotes)"
}
这是问题的图片。
请在Swift中了解Collections
。你要找的是 Array
类型。表示按特定顺序存储的元素集合的类型。
文档: https://developer.apple.com/documentation/swift/array
现在当你学习如何将东西保存到数组中时,你可以将这个数组连接到你的tableView
。
最基本的设置是:
var quotes: [String] = ["quote1", "quote2", "quote3"]
在numberOfRowsInSection
你returnquotes.count
并且在 cellForRow
你的 cell.textLabel.text == quotes[indexPath.row]
按照下面的方法尝试..
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let savedQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
return saveQuotes.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "QuoteCell", for: indexPath)
let saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
cell.textLabel?.text = saveQuotes[indexPath.row]
return cell
}
func saveQuote(){
var saveQuotes = UserDefaults.standard.value(forKey: "saveQuotes") as? [String] ?? [String]()
saveQuotes.append(quoteLabel.text!)
UserDefaults.standard.set(saveQuotes, forKey: "saveQuotes")
print(saveQuotes)
}
这只是一个示例,推荐的方法是使用 sqlite 或 core-data 来存储持久数据而不是 UserDefaults。