2016-10-20 3 views
1

Ich verwende den folgenden Code, um jedes Mal neue Nachrichten hinzuzufügen, wenn der Benutzer eine Nachricht eingibt und auf "Senden" klickt. Es funktioniert großartig. Das Problem ist jedoch, dass neue Nachrichten oben in der Tabellenansicht eingefügt werden. Ich möchte, dass es unten eingefügt wird.So fügen Sie neue Zeilen am Ende der Tabellenansicht hinzu - Chatnachrichten

import UIKit 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet var messagesTable: UITableView! 
    @IBOutlet var messageTextBox: UITextField! 

    var messageArray = [String]() 

    @IBAction func sendMessage(sender: AnyObject) { 

     messageArray.append(messageTextBox.text!) 
     messagesTable.reloadData() 
     messageTextBox.text = "" 

    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return messageArray.count 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 80 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


     //self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0) 

     let cell = NSBundle.mainBundle().loadNibNamed("AgentMessageText", owner: self, options: nil)?.first as! AgentMessageText 
     cell.messageText.text = messageArray[indexPath.row] 
     return cell 
    } 

} 

Der folgende Code fügt Zeilen nach unten ein. Die neu eingefügten Zeilen befinden sich jedoch unterhalb des Ansichtspunkts. Das heißt wir es scrollen müssen jedes Mal, um zu sehen,

self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0) 
+0

Sehen bei y hinzufügen Mit unserem Code werden deine Nachrichten ganz unten und nicht oben eingefügt. Das Problem, vor dem Sie stehen, ist, dass Sie scrollen müssen, um sie zu sehen, richtig? –

+0

Fügen Sie eine Nachricht zu Ihrer Nachricht hinzuArray und fügen Sie Ihre Zeile mit 'insertRowsAtIndexPaths', dann verwenden Sie' scrollToRowAtIndexPath', um zu dieser neu hinzugefügten Nachricht zu scrollen – NSNoob

+0

Auch warum die Nachrichten oben hinzugefügt werden, müssen Sie uns zeigen, wie Sie Ihre aktualisieren Datenquellen-Array für neue Nachricht. Wie Inder Kumar Rathore sagte, sollten Ihre Zellen nicht unten hinzugefügt werden, wenn Sie Ihren 'cellForRowAtIndexPath' betrachten. Es ist auch nicht notwendig, ganze TableView neu zu laden, Sie können einfach scrollToRowAtIndexPath verwenden und zum letzten Element scrollen – NSNoob

Antwort

2

Eine gemeinsame Lösung für dieses Problem ist es, die Tableview zu drehen (so Zellen auf den Boden kleben) dann die Zellen Flip so dass der Inhalt richtig ausgerichtet ist.

Beispiel:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //flips the tableview (and all cells) upside down 
    messagesTableView.transform = CGAffineTransformMakeScale(1, -1) 
} 

...

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    ... 

    //flips the cell to appear oriented correctly 
    cell.transform = CGAffineTransformMakeScale(1, -1) 
+0

Ja. Es wäre eine große Hilfe, wenn Sie mir den Code –

+0

in Ordnung zeigen können. Sieht großartig aus!! –

0

Sie haben scrollToRow zu benutzen, um Ihre Nachricht zu blättern (.. Verwenden .bottom/.top/etc nach Ihrem Bedarf) auch stattdessen Ihre ganze Tabellen-Ansicht Nachladen können Sie nur eine (neue) Nachricht (Zelle) zur Tabellenansicht

@IBAction func sendMessage(sender: AnyObject) { 
    messageArray.append(messageTextBox.text!) 
    messagesTable.reloadData() 
    let indexPath = IndexPath(item: messageArray.count, section: 0) 
    messagesTable.scrollToRow(at: indexPath, at: .bottom, animated: true) 
    messageTextBox.text = "" 
} 
+0

Ich erhalte einen Fehler: "Verwendung von unaufgelösten Identifizierer 'indexPath' –

+0

verwenden Sie swift 3? –

+0

Nein swift 2, xcode 7.3 –

Verwandte Themen