使用UserDefaults输入文本追加数组

时间:2017-07-19 15:15:59

标签: arrays swift swift3 nsuserdefaults

我有一个字符串数组,它填充了一个集合视图,效果很好。问题是我想要使用从用户输入文本字段保存在用户默认值中的字符串附加该数组。我收到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)
}

3 个答案:

答案 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)
}