2017-03-31 1 views
1

Ich versuche direkt zu einem Bildschirm zu gelangen, der normalerweise durch Tippen auf eine Tabellenansicht erreicht wird - Grundsätzlich tritt der Benutzer ein ein Seitenname auf Screen A, und dann wird die Tabellenansicht Screen B genommen, wo der Name, den sie eingaben, jetzt die erste und einzige Zelle in der Tabellenansicht ist. Dann tippen sie auf diese Zelle, um zu erreichen.Wie initialisiere ich einen neuen Bildschirm und gehe zu ihm, während ich ihn zu einer Tabellenansicht im Hintergrund hinzufüge

Jetzt möchte ich Screen B aus der Gleichung herausschneiden - ich werde diese Tabelle in einem Slide-Out-Menü einbetten, so dass ich es überhaupt nicht präsentieren möchte, ich möchte nur die Tabelle im Hintergrund aktualisieren.

Dies ist mein Code so weit, alle auf der Setup-Seite (Screen A):

Dies ist die prepareForSegue, die aufgerufen wird, wenn der Benutzer für die App Anmeldung beendet und drückt "done":

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if (segue.identifier == "initChat") { 
     let chatVc = segue.destination as! ChatViewController 
     let roomVc = RoomsTableViewController() 
       if let roomName = self.chatRoomNameTextField.text { 

        let newRoomRef = roomRef.childByAutoId() 
        let roomItem = [ 
         "name": roomName 
        ] 
        newRoomRef.setValue(roomItem) 

        // Start participants list with current user 
        let participantsRef = newRoomRef.child("participants") 
        let newParticipantRef = participantsRef.childByAutoId() 

        if let uid = FIRAuth.auth()?.currentUser?.uid { 
         newParticipantRef.setValue(uid) 
        } 
       } 
       roomVc.senderDisplayName = "Joe" 
    } 
} 

Und das ist ein Beobachter für die Firebase der Aktualisierung der Tabellen-Ansicht, sobald der Benutzer zuständig ist, gibt einen Namen:

private func observeRooms() { 
     // Observe method to listen for new channels being written to Firebase 
     let roomVc = RoomsTableViewController() 

     roomVc.roomRefHandle = roomVc.roomRef.observe(.childAdded, with: { (snapshot) -> Void in 
      let roomData = snapshot.value as! Dictionary<String, AnyObject> 
      let id = snapshot.key 

      if let uid = FIRAuth.auth()?.currentUser?.uid { 
       if let name = roomData["name"] as! String!, name.characters.count > 0 { 
        roomVc.rooms.append(Room(id: id, name: name, participants: [uid])) 
        roomVc.tableView.reloadData() 
       } else { 
        print("Error! Could not decode channel data") 
       } 
      } 
     }) 
    } 

Und dies ist das IB Aktion für die Schaltfläche „Fertig“ gedrückt wird:

@IBAction func setupDoneButtonPressed(_ sender: Any) { 

    setUserInfo() 
    observeRooms() 

    let room = rooms // <-- This is where I need to indicate that I want to go to the first room in the table 
    self.performSegue(withIdentifier: "initChat", sender: room) 
} 

In diesem Fall weiß ich, dass der Bildschirm wird ich immer die erste Zelle in der Tabellenansicht zu laden, weil an dieser Stelle wird es die erste sein, Zelle erstellt. Aber ich weiß nicht, wie ich das ohne den Indexpfad in den Methoden der Tabellenansicht angeben soll.

Wie kann ich das tun?

Antwort

0

Für Aktualisierung der Tabellenansicht Verwendung:

self.tableView.reloadData() 

Was Sie tun müssen, ist: Nachdem der Benutzer den Suchwert, und drücken Sie die Taste, setupDoneButtonPressed() wird ausgeführt, danach, Sie müssen neue Daten in eine globale Variable setzen. Wenn Daten festgelegt wurden, müssen Sie de tableview erneut laden. Ich denke, das könnte helfen, lass es mich wissen, wenn du das ausprobierst.

+0

Ich lade die Tabellenansicht in der Funktion 'observeRooms' mit' roomVc.tableView.ReloadData() 'neu. – KingTim

+0

Funktioniert es ?, Ich überprüfte Ihren Code und ich bin mir nicht sicher, ob die Variable "rooms" Daten enthält. – Richimf

+0

Es ist nicht, es sieht definitiv wie Zimmer nicht die Daten bekommen, obwohl ich nicht weiß, was ich sonst tun kann - ich habe den ganzen Code, der normalerweise in der RoomsTableViewController, im Setup-Controller statt (minus der tatsächlich Tableview-Methoden natürlich), so kann ich den Raumcontroller umgehen. Dies ist der Zimmer-Controller: https://pastebin.com/9EkCw23C und der Setup-Controller: https://pastebin.com/YY4MxjgX. – KingTim

Verwandte Themen