2016-07-10 4 views
0

の先頭に行を追加する: -私はトップ<code>let indexPath : [NSIndexPath] = [NSIndexPath(forRow: 0, inSection: 0)]</code> <code>parentTableView.insertRowsAtIndexPaths(indexPath, withRowAnimation: .Fade)</code>上のtableViewに行を追加しようとしていますが、これが私のコードでのtableView</p> <p>の一番下に追加されたのtableView

insertRowsAtIndexPathsは、暗黙的にテーブルビューを再配置するので
import UIKit 

class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource,transferDelegate , UIViewControllerTransitioningDelegate{ 

var xibName : String = "HomepageFeedCellHeader" 


var lords : [String] = ["name1","name2","name3"] 

var queens : [String] = ["--","q1","q2"] 

var desc : [String] = ["alpha","beta","gamma"] 

var menProfilePictures : [UIImage] = [UIImage(named: "DaarioNaharis")!,UIImage(named: "JaimeLannister")!,UIImage(named: "LordVarys")!] 

@IBOutlet weak var postButton: UIButton! 

@IBOutlet weak var parentTableView: UITableView! 

@IBOutlet weak var pickImages: UIButton! 

var a : ParentTableViewCell = ParentTableViewCell() 

@IBOutlet weak var postTextView: UITextView! 





override func viewDidLoad() { 

    super.viewDidLoad() 



    parentTableView.delegate = self 
    parentTableView.dataSource = self 


} 




func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 




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



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

    let cell = parentTableView.dequeueReusableCellWithIdentifier("ParentCell", forIndexPath: indexPath) as! ParentTableViewCell 


    cell.transferingDelegate = self 


    cell.feedPostUsername.text = lords[indexPath.row] 
    cell.feedPostUserDetails.text = queens[indexPath.row] 
    cell.feedPostDescription.text = desc[indexPath.row] 
    cell.feedUserProfilePictures.image = menProfilePictures[indexPath.row] 
    cell.selectionStyle = .None 


    return cell 


} 

func transfer(itemNo : Int) { 

    print("call recieved in viewController from item \(itemNo)") 

    let imagePopOverScene = self.navigationController?.storyboard?.instantiateViewControllerWithIdentifier("ImagePopOverViewControllerVC_ID") as? ImagePopOverViewController 

    print("itemNo in viewControlle \(itemNo)") 
    if itemNo < 3{ 

     imagePopOverScene?.setImage = menProfilePictures[itemNo] 

    }else{ 

     imagePopOverScene?.setImage = UIImage(named: "defaultProfilePic") 

    } 

    imagePopOverScene?.transitioningDelegate = self 

    self.navigationController?.pushViewController(imagePopOverScene!, animated: true) 

} 

@IBAction func postBtnAction(sender: UIButton) { 

    print("post btn action recieved") 
    tableViewConfiguration() 

} 

func tableViewConfiguration(){ 



    parentTableView.beginUpdates() 

    desc.append(postTextView.text!) 
    menProfilePictures.append(UIImage(named: "defaultProfilePic")!) 
    queens.append("--") 
    lords.append("Anonymous") 

    let indexPath : [NSIndexPath] = [NSIndexPath(forRow: 0, inSection: 0)] 
    print(indexPath) 
    parentTableView.insertRowsAtIndexPaths(indexPath, withRowAnimation: .Fade) 

    tableView(parentTableView, cellForRowAtIndexPath: indexPath[0]) 

    parentTableView.endUpdates() 
    parentTableView.reloadData() 

    parentTableView.scrollToRowAtIndexPath(indexPath[0], atScrollPosition: UITableViewScrollPosition.Top, animated: true) 


} 


@IBAction func pickImagesAction(sender: UIButton) { 





} 

}

答えて

3

まず、insertRowsAtIndexPathsを呼び出した後reloadDataを呼び出すことはありません。

しかし、このような状況では、実際の問題があいまいです。

データソース配列に新しい項目を追加しています - ところで、3つではなくカスタム構造体を使用してください(編集:4つもあります! )配列 - 物理的に末尾にです。

insertRowsAtIndexPathsは、項目をインデックス0に正しく挿入しますが、その後のテーブルビューの再読み込みでは、データソース配列に従って項目がテーブルの最後に移動します。

解決insertデータ源アレイ(単数または複数)のインデックス0の項目(S)よりもむしろそれらappend

編集

  • は、あなたのビューコントローラの外ViewController

    struct Avatar { 
    
        let lord : String 
        let queen : String 
        let desc : String 
        let profileImage : UIImage? 
    
        init(lord: String, queen: String, desc: String, imageName: String) { 
        self.lord = lord 
        self.queen = queen 
        self.desc = desc 
        self.profileImage = UIImage(named: imageName) 
        } 
    } 
    
  • を宣言することを宣言したカスタム構造体を使用するために提案データ源アレイ

    var avatars = [Avatar]() 
    
  • 特性

    let avatar = avatars[indexPath.row] 
    cell.feedPostUsername.text = avatar.lord 
    cell.feedPostUserDetails.text = avatar.queen 
    cell.feedPostDescription.text = avatar.desc 
    cell.feedUserProfilePictures.image = avatar.profileImage 
    
  • 0を交換割り当​​てるcellForRowAtIndexPathnumberOfRowsInSectionリターンavatars.count

  • のデータソースアレイ

    override func viewDidLoad() { 
        super.viewDidLoad() 
        parentTableView.delegate = self 
        parentTableView.dataSource = self 
    
        avatars = [Avatar(lord: "name1", queen: "--", desc: "alpha", imageName: "DaarioNaharis"), 
           Avatar(lord: "name2", queen: "q1", desc: "beta", imageName: "JaimeLannister"), 
           Avatar(lord: "name3", queen: "q2", desc: "gamma", imageName: "LordVarys")] 
        parentTableView.reloadData() 
    } 
    
  • を移入私はこれに新しいです@vadian

    func tableViewConfiguration(){ 
        let newAvatar = Avatar(lord: "Anonymous", queen: "--", desc: postTextView.text!, imageName: "defaultProfilePic" 
        avatars.insert(newAvatar, atIndex: 0) 
        let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
        print(indexPath) 
        parentTableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
        parentTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true) 
    } 
    
+0

とはねえ、本当にそれを取得できませんでした!...また、あなたは私が私の基本をクリアするためのマニュアルを参照してくださいすることができます! – Dravidian

+0

モデル(データソース配列)とビュー(テーブルビュー)を同期させておく必要があります。つまり、データソース配列内の新しい項目を、テーブルビューに表示するのと同じインデックスに正確に挿入する必要があります。 'reloadData()'行を省略すると、完了です。 – vadian

+0

あなたは私が知らないことを、コードでどうやってやりますか?...初心者です.. – Dravidian

関連する問題

 関連する問題