Ich lasse meine Benutzer einen Knopf in der Zelle drücken, um die Daten aus dem Firebase-Backend zu entfernen. Ich möchte, dass die Zelle zur gleichen Zeit entfernt wird. Es wird aus der Firebase-Datenbank entfernt, aber es wird nicht aus der Sammlungsansicht entfernt. Wenn ich die Ansicht verlasse und in die CollectionView zurückgehe, wird sie entfernt.
Wie bekomme ich das, wo es nach dem Klick entfernt wird und Sie in der Ansicht bleiben?UICollectionView-Daten werden nach dem Entfernen der Firebase nicht entfernt
func didSelect(for cell: StaffSearchCell) {
guard let indexpath = collectionView?.indexPath(for: cell) else { return }
let studentUser = self.filteredUsers[indexpath.item]
let selectedUserId = studentUser.uid
guard let staffUID = Auth.auth().currentUser?.uid else { return }
print("1st")
// Add student to staff list
let ref = Database.database().reference().child("staffUsers").child(staffUID).child("studentSession1List")
let values = [selectedUserId: true]
ref.updateChildValues(values) { (err, ref) in
if let err = err {
print("Failed to follow user:", err)
return
}
print("student to staff")
}
// Add selected staff to student list
let studentRef = Database.database().reference().child("studentUsers").child(selectedUserId).child("studentSession1List")
studentRef.removeValue()
let staffValues = [staffUID: true]
studentRef.updateChildValues(staffValues) { (err, studentRef) in
if let err = err {
print("Failed to follow user:", err)
return
}
print("staff to student")
}
let allStudentRef = Database.database().reference()
allStudentRef.child("session1AllStudents").child(selectedUserId).removeValue() { (error, ref) in
if error != nil {
print("error \(error)")
}
print("removed from session1AllStudents")
self.fetchRemainingStudents()
}
searchBar.isHidden = true
searchBar.resignFirstResponder()
// self.collectionView?.reloadData()
//self.navigationController?.popViewController(animated: true)
}
var filteredUsers = [User]()
var users = [User]()
func fetchRemainingStudents() {
print("second")
let ref = Database.database().reference()
ref.child("session1AllStudents").observeSingleEvent(of: .value, with: { (snapshot) in
HUD.show(.labeledProgress(title: "Finding Students", subtitle: nil))
for snap in snapshot.children {
let studentsSnap = snap as! DataSnapshot
let studentsKey = studentsSnap.key
let studentDict = snapshot.value as! [String: Any]
var aStudent = User(uid: studentsKey, dictionary: studentDict)
let userRef = ref.child("studentUsers").child(studentsKey)
userRef.observeSingleEvent(of: .value, with: { snapshot in
let userDict = snapshot.value as! [String:AnyObject]
let firstName = userDict["firstName"] as! String
let lastName = userDict["lastName"] as! String
let email = userDict["email"] as! String
aStudent.firstName = firstName
aStudent.lastName = lastName
aStudent.email = email
self.users.append(aStudent)
self.filteredUsers = self.users
// self.users.sort(by: { (u1, u2) -> Bool in
//
// return u1.lastName.compare(u2.lastName) == .orderedAscending
// })
HUD.hide()
self.collectionView?.reloadData()
})
}
})
}
Cell:
protocol StaffSearchCellDelegate {
func didSelect(for cell: StaffSearchCell)}
Klasse StaffSearchCell: UICollectionViewCell {
var delegate: StaffSearchCellDelegate?
var user: User? {
didSet {
lastNameLabel.text = user?.lastName
firstNameLabel.text = user?.firstName
guard let email = user?.email else { return }
if email == "" {
emailLabel.text = ""
} else {
emailLabel.text = user?.email
}
}
}
let firstNameLabel: UILabel = {
let label = UILabel()
label.text = "First Name"
label.font = UIFont.boldSystemFont(ofSize: 12)
return label
}()
let lastNameLabel: UILabel = {
let label = UILabel()
label.text = "Last Name"
label.font = UIFont.boldSystemFont(ofSize: 12)
return label
}()
let emailLabel: UILabel = {
let label = UILabel()
label.text = "@email"
label.font = UIFont.systemFont(ofSize: 11)
label.textColor = UIColor.lightGray
label.textAlignment = .left
return label
}()
lazy var addSessionButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Add", for: .normal)
button.addTarget(self, action: #selector(handleSelectSession), for: .touchUpInside)
button.backgroundColor = UIColor.bulldogGold().withAlphaComponent(0.75)
button.setTitleColor(UIColor.black, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 14)
button.layer.cornerRadius = 5
return button
}()
func handleSelectSession() {
print("student selected")
delegate?.didSelect(for: self)
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(firstNameLabel)
addSubview(lastNameLabel)
addSubview(emailLabel)
addSubview(addSessionButton)
firstNameLabel.anchor(top: topAnchor, left: leftAnchor, bottom: bottomAnchor, right: lastNameLabel.leftAnchor, paddingTop: 0, paddingLeft: 8, paddingBottom: 0, paddingRight: 4, width: 0, height: 0)
lastNameLabel.anchor(top: topAnchor, left: firstNameLabel.rightAnchor, bottom: bottomAnchor, right: emailLabel.leftAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 4, width: 0, height: 0)
emailLabel.anchor(top: topAnchor, left: lastNameLabel.rightAnchor, bottom: bottomAnchor, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 8, width: 0, height: 0)
addSessionButton.anchor(top: topAnchor, left: nil, bottom: bottomAnchor, right: rightAnchor, paddingTop: 4, paddingLeft: 4, paddingBottom: 4
, paddingRight: 4, width: 50, height: 0)
let separatorView = UIView()
separatorView.backgroundColor = UIColor(white: 0, alpha: 0.5)
addSubview(separatorView)
separatorView.anchor(top: nil, left: firstNameLabel.leftAnchor, bottom: bottomAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0.5)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}}