arrays - 如何在 iOS Swift 的 didselect 方法中重新排列单元格?
问题描述
考虑我有一个数组 ["one","two","three","four","five"]。我想在 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
}
}
当点击单元格二时,数组应该是 ["two","three","four","five","one"]
当点击单元格四时,数组应该是 ["three","four","five","one","two"]
我试过这样并且工作正常,但我需要另一种方法
在 didselect 方法中
var data = self.items[0]
self.items.remove(at: 0)
self.items.insert(data, at: 4)
tableView.reloadData()
有没有其他方法可以实现这一目标?
我如何使用 tableview 和没有 tableview 来实现这一点?
解决方案
当您单击 a 时,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)
}
}
现在,您 UICollectionView
或UITableView
您可以在didSelect
功能中轻松使用它。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
items = items.shiftRight(indexPath.row)
}
最后一步是向您的数据源添加一个属性侦听器,这样您就可以在tableView
像collectionView
这样更改值时自动刷新
var items = ["one","two","three","four","five"] {
didSet {
//tableView.reloadData()
}
}
除了你的情况:
改变这个:var items = [UserObject]()
对此:
var items: [UserObject] = [] {
didSet {
DispatchQueue.main.async {
tableView.reloadData()
}
}
}
推荐阅读
- kubernetes - Kubernetes HA:Flannel 抛出 SubnetManager 错误
- python - PyQt4 Matplotlib 疑难解答
- mysql - SQL 日期的天数差异
- php - 使用 Mamp 与 php 链接 sql 数据库表
- ios - 离子科尔多瓦本机插件在IOS中不起作用
- java - 为什么java安全管理器不是强制性的?
- javascript - 折叠不起作用(引导程序 4)
- regex - 包含子字符串但不包含另一个的正则表达式
- python - Ansible修改部分行
- reactjs - 无法使用 redux 开发者工具 chrome 扩展修改的经过身份验证的路由