2016-07-12 68 views
-1

我開始使用UITableViews,似乎無法找出如何使用代碼更改單元格的位置。改變故事板中的位置很簡單,但我需要能夠快速完成。更改單元格的索引

+0

我假設你正在討論改變tableview中單元格的索引/順序。您需要在tableview的數據源中更改單元格數據的順序,然後調用'tableview.reloadData()' –

回答

0

TLDR;

  1. 更新您的信息。即swap(&arr[2], &arr[3])
  2. 調用tableView的reloadData()方法來反映對數據的更改。

龍答案

通過檢查它的數據源(UITableViewDataSource)爲它所需要的信息UITableView工程實例。這包括段和行的數量,以及表視圖要使用的UITableViewCell的實例。這是由以下UITableViewDataSource委託方法定義:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int; 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int; 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell; 

通常情況下,你會立足於一些數據,你有,可能一個數組或類似容器前兩者。例如,如果您的tableView從名爲fruitArray(其中包含不同水果的名稱 - 字符串列表)陣列顯示的數據,那麼你可能有類似以下內容:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // Our array is one dimensional, so only need one section. 
    // If you have an array of arrays for example, you could set this using the number of elements of your child arrays 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // Number of fruits in our array 
    return fruitArray.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("yourCellId") // Set this in Interface Builder 
    cell.textLabel?.text = fruitArray[indexPath.row] 
    return cell 
} 

然後,你可以看到,回答你的問題變得簡單!由於給定單元格的內容基於fruitArray,所以您只需更新數組。但是,如何讓tableView「重新檢查」它的dataSource?那麼,你使用reloadData方法,像這樣:

swap(&fruitArray[2], &fruitArray[3]) 
tableView.reloadData() 

這則觸發的tableView爲「複檢」它的DataSource,從而導致您的數據交換出現在屏幕上!

如果您想用戶能夠交換單元的位置,你可以使用下面的的UITableViewDelegate(不UITableViewDataSource)的委託方法:

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 

具有看看this article更多信息。您還可以查看關於UITableViewUITableViewDataSourceUITableViewDelegate的Apple文檔以獲取更多詳細信息。

希望這會有所幫助!

+0

非常感謝Jason的幫助! –

+0

如果您認爲這回答了您的問題,請標記爲已接受的答案。謝謝! – Jason