要进入移动模式,必须要进入列表编辑模式,只需要添加 EditButton() 就好进入编辑模式
第一个步
要在导航栏里把这个加上 EditButton()
List{ }.navigationTitle("人员管理")
.toolbar { EditButton() }
加完后导航栏上面会出现一个Edit 按钮
第二步
调用 ForEach 的 onMove() 方法
@inlinable public func onMove(perform action: ((IndexSet, Int) -> Void)?) -> some DynamicViewContent
我们只需要在上节教程里的onDelete( ) 后面在调用下onMove( )即可
完整代码如下
struct ListRowDelete: View {
@State var dataItems = dataSource;
var body: some View {
List{
ForEach(dataItems) { item in
//跳转Link 目标是DetailView 详情
NavigationLink(
destination:DetailView(item: item)) {
HStack(spacing:15, content: {
Image(item.avatar).resizable().frame(width:50,height:50)
VStack(alignment: .leading, spacing: 10, content: {
let name = "姓名:" + item.name
Text(name)
let age = "年龄:" + item.age
Text(age).foregroundColor(.gray).font(.system(size:16))
}).frame(height:50)
})
}
}.onDelete(perform:deleteRow).onMove(perform:moveRow)
}.navigationTitle("人员管理")
.toolbar { EditButton() }
}
func deleteRow(at offsets: IndexSet) {
dataItems.remove(atOffsets: offsets)
}
func moveRow(from:IndexSet,to:Int) {
dataItems.move(fromOffsets: from, toOffset:to)
}
}
现在这个例子可以 跳转,删除,移动