我有一个字符串数组,它填充了一个集合视图,效果很好。问题是我想要使用从用户输入文本字段保存在用户默认值中的字符串附加该数组。我收到UserDefault数据,问题是它没有出现在单独的集合视图单元格中。它会附加在当前单元格中每个字符串的末尾。在此先感谢,任何帮助将不胜感激。
这是我到目前为止所尝试的:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
let defaults = UserDefaults.standard
let value = defaults.string(forKey: "Gratitude")
print(value!)
//Array that I am trying to append with userdefault data
gratitudeArray.append(value!)
// Configure the cell
cell.cellLabel.text = gratitudeArray[indexPath.row]
return cell
}
//我正在通过提醒来保存用户输入并保存在这样的用户默认中:
func presentAlert(){ 让alertController = UIAlertController(标题:"",消息:"创建你自己的感恩:",preferredStyle:.alert)
let confirmAction = UIAlertAction(title: "Save", style: .default) { (_) in
if let field = alertController.textFields?[0] {
// store data
UserDefaults.standard.set(field.text, forKey: "Gratitude")
UserDefaults.standard.synchronize()
} else {
print()
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in }
alertController.addTextField { (textField) in
//print(textField.text!)
//textField.placeholder = ""
}
alertController.addAction(confirmAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
}
答案 0 :(得分:0)
在ViewDidLoad()中存储字符串,如下所示:
var strValue: String = ""
override func viewDidLoad() {
super.viewDidLoad()
let defaults = UserDefaults.standard
strValue= defaults.string(forKey: "Gratitude")
}
并在cellForItemAt中显示如下:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.cellLabel.text = gratitudeArray[indexPath.row] + " " + strValue
return cell
}
答案 1 :(得分:0)
如果我正确理解您的问题,您需要将单元格数量增加一个(从UserDefaults中提取的值)。为此,您应该将它附加到集合视图外部的数据源方法(如viewDidLoad()),然后重新加载集合视图。
override func viewDidLoad() {
super.viewDidLoad()
let defaults = UserDefaults.standard
strValue = defaults.string(forKey: "Gratitude")
gratitudeArray.append(strValue)
self.collectionView.reloadData()
}
答案 2 :(得分:0)
我通过在警报控制器中创建一个数组以保存用户输入然后将该数组保存到用户默认值来解决了这个问题。
func presentAlert(){ 让alertController = UIAlertController(标题:"",消息:"创建你自己的感恩:",preferredStyle:.alert)
let confirmAction = UIAlertAction(title: "Save", style: .default) { (_) in
if let field = alertController.textFields {
let textFieldArray = field as [UITextField]
let text = textFieldArray[0].text
let key = "Gratitude"
var myArray = UserDefaults.standard.array(forKey: key) ?? []
myArray.append(String(describing: text!))
UserDefaults.standard.set(myArray, forKey: key)
print(myArray)
} else {
print()
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in }
alertController.addTextField { (textField) in
}
alertController.addAction(confirmAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
}