2016-10-20 4 views
1

私は次のコードを使用して、ユーザーがメッセージを入力して「送信」をクリックするたびに新しいメッセージを追加しています。それは素晴らしい作品です。しかし、問題は、新しいメッセージがテーブルビューの一番上に挿入されることです。私はそれを底に挿入したい。テーブルビューの下部に新しい行を追加する方法 - チャットメッセージ

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 
    } 

} 

以下のコードは、行を下に挿入します。しかし、新しく挿入された行はビューポイントの下にあります。それは我々がそれを見るためにスクロールする必要が

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

に一つだけ(新しい)メッセージ(セル)を追加することができます私たちのコードはあなたのメッセージが一番上のものではなく一番下に挿入されています。あなたが直面している問題は、それらを見るためにスクロールしなければならないということですね。 –

+0

あなたのmessageArrayにメッセージを追加し、 'insertRowsAtIndexPaths'であなたの行を挿入し、' scrollToRowAtIndexPath'を使って新しく追加されたメッセージにスクロールします。 – NSNoob

+0

また、メッセージがトップに追加される理由について、新しいメッセージのためのデータソース配列。 Inder Kumar Rathoreが述べたように、あなたのセルは、 'cellForRowAtIndexPath'を見て底部に追加すべきではありません。 TableView全体を再読み込みする必要はありません。scrollToRowAtIndexPathを使用して最後の要素までスクロールすることができます。 – NSNoob

答えて

2

たびは、この問題に対する一般的な解決策は、コンテンツが適切に配向されているように、細胞を反転その後、(細胞が底に付くようにする)テーブルビューを反転することです。

例:

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

はい。私にコード –

+0

okを表示できるなら、大きな助けになるでしょう。素晴らしく見える!! –

0

あなたのメッセージにスクロールするscrollToRowを使用するようにしました(.bottom/.topの/ etc使用ACCをあなたの必要性に。。) はまた、代わりにあなたの全体のテーブルビューをリロードのあなたをyで見て、テーブルビュー

@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

エラーが発生しました:「未解決の識別子の使用 'indexPath' –

+0

swift 3を使用していますか? –

+0

swift 2、xcode 7.3 –

関連する問題