2016-02-02 2 views
2

У меня есть проект iOS, над которым я работаю в Xcode 7 с использованием Swift 2. У меня есть array с именем details со словарем, который включает в себя String и значение Int. Int называется cellOrder в Class и идея состоит в том, чтобы отсортировать detailsarray в TableView с каким-то на основе значения в cellOrderInt.Swift 2 TableView Sorting

Массив показывает значения String, которые являются именами. Я посмотрел here, чтобы попытаться реализовать это в моем проекте без успеха.

Вот мой массив:

// Array of data for the TableView 
var details = [ProjectDetails]() 

Вот мой TableView Код:

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return details.count 

} 

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 

    cell.textLabel!.text = details[indexPath.row]   

    return cell 

} 

Как сделать вид, и где бы я поставил код, ViewDidLoad() или, может быть cellForRowAtIndexPath?

UPDATE:

Мой ViewDidLoad():

override func viewDidLoad() { 
    super.viewDidLoad() 

    // TableView Sorting 
    details.sortInPlace({$0.cellOrder < $1.cellOrder}) 

    tableView.delegate = self 

    ... 

} 

Update 2:

Мои ProjectDetailsclass для данных array является:

import UIKit 

class ProjectDetails: NSObject, NSCoding { 

    // MARK: Properties 

    var fileName: String 
    var cellOrder: Int 

    ... 

} 

ответ

3

Для сортировки массива вы бы просто сделать details.sortInPlace({$0.cellOrder < $1.cellOrder}) в viewDidLoad, или вы можете использовать details.sort({$0.cellOrder < $1.cellOrder})[indexPath.row] в cellForRowAtIndexPath, но это может оказаться опасным, если не следить за ваш массив.

Один будет сортировать массив на месте, один вернет отсортированный неизменный массив.

Если вы настаиваете на том, чтобы сортировка была неизменно (имеет свои плюсы и минусы за пределами этой области), назначьте ее другому массиву и используйте это в своей логике.

+0

Я добавил новый элемент массиву с 'cellOrder' из 0 и перезагрузил« TableView », но сохранил старый тип на основе« IndexPath ». Он был единственным с 0 как «cellOrder». – ChallengerGuy

+0

После сортировки вам нужно вызвать 'reloadData()' в UITableView. Это необязательно после сортировки в viewDidLoad, так как это происходит до заполнения таблицы. – diatrevolo

+0

Я положил его в свой 'ViewDidLoad'. Это был первый пункт в нем. – ChallengerGuy

1

Вы должны отсортировать itens в этом массиве details[], после этого вы можете позвонить по телефону tableView.reloadData(), чтобы перезагрузить эту информацию.

В cellForRowAtIndexPath вы должны просто взять данные, чтобы заполнить ячейку, поэтому НИКАКИЕ СОРТИРОВАТЬ ТАМ!

Сортировка в любом месте, прежде чем вызывать функцию перезагрузки.