我正在制作一个简单的待办事项列表应用程序。 Firebase Realtime Database当前正在按用户存储每个待办事项列表项。当用户向右滑动时,用户可以选择从列表中删除该项目并将其从Firebase中删除。
我的代码目前存在的问题是,当用户向右滑动删除时,它将删除整个节点。我还没有找到一种方法来存储childByAutoId()
,然后在需要删除时将其恢复。有任何指导或帮助吗?
var ref: DatabaseReference!
var items:[String] = []
var key = ""
@IBOutlet weak var itemPopup: UITextField!
@IBOutlet weak var myTableView: UITableView!
@IBOutlet weak var label1: UILabel!
@IBAction func addItem(_ sender: Any) {
if itemPopup.isHidden == true
{
itemPopup.isHidden = false
self.itemPopup.becomeFirstResponder()
}
else
{
itemPopup.isHidden = true
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.itemPopup.resignFirstResponder()
self.itemPopup.isHidden = true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
itemPopup.resignFirstResponder()
itemPopup.isHidden = true
ref.child(key).childByAutoId().setValue(itemPopup.text)
itemPopup.text = ""
return true
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = items[indexPath.row]
cell.textLabel?.numberOfLines=0 // line wrap
cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
let state = [indexPath.row]
print(state)
items.remove(at: indexPath.item)
tableView.deleteRows(at: [indexPath], with: .fade)
ref.child(key).removeValue()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.itemPopup.delegate = self
ref = Database.database().reference()
key = ref.childByAutoId().key!
ref.child(key).observe(.childAdded, with: { (snapshot) in
if let item = snapshot.value as? String
{
self.items.append(item)
self.myTableView.reloadData()
}
})
}