如何在 iOS Swift 中重新排列 didselect 方法中的单元格?



考虑我有一个数组["一","二","三","四","五"]。 我想在 didselect 方法中重新排列单元格。

例如:

var items = [UserObject]()

型:

import SwiftyJSON
class UserObject {
var URL: String!
var Name: String!

required init(json: JSON) {
URL = json["URL"].stringValue
Name = json["Name"].stringValue
}
}

点击单元格二时,数组应该是["二","三","四","五","一"]

点击单元格四时,数组应为["三","四","五","一","二"]

我尝试过这样,它工作正常,但我需要另一种方法

在选择方法中

var data = self.items[0]
self.items.remove(at: 0)
self.items.insert(data, at: 4)
tableView.reloadData()

有没有其他方法可以实现这一目标?

如何使用表视图和无表视图来实现此目的?

当您单击一个cell/index时,您要将所选的移动到index 0

您可以实现此extension并在需要转移时使用它:

extension Array {
func shiftRight(_ amount: Int = 1) -> [Element] {
var amount = amount
assert(-count...count ~= amount, "Shift amount out of bounds")
if amount < 0 { amount += count }  // this needs to be >= 0
return Array(self[amount ..< count] + self[0 ..< amount])
}
mutating func shiftRightInPlace(amount: Int = 1) {
self = shiftRight(amount)
}
}

现在,对于您的UICollectionViewUITableView,您可以在didSelect功能中轻松使用它。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
items = items.shiftRight(indexPath.row)
}

最后一步是将属性侦听器添加到数据源,以便在tableViewcollectionView更改此类值时自动刷新

var items = ["one","two","three","four","five"] {
didSet {
//tableView.reloadData()
}
}

除了您的情况:

更改此内容:var items = [UserObject]()

对此:

var items: [UserObject] = [] {
didSet {
DispatchQueue.main.async {
tableView.reloadData()
}
}
}

您可以使用以下函数。

//Pass index (selected cell index)
func arrangArray(ForIndex index: Int) {
for i in 0..<self.items.count {
if i == index {
break
}
let user = self.items[0]
self.items.remove(at: 0)
self.items.append(user)
}
} 
......
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
arrangArray(ForIndex: indexPath.row)
tableView.reloadData()
}

最新更新