Anj*_*iya 6 list ios swift swiftui
我正在 SwiftUI 中使用 List。我想在列表中添加拖放行(项目)的功能。在 Swift 中,我们有 UITableView 的 Delegate 和 DataSource 方法,如下所示:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
Run Code Online (Sandbox Code Playgroud)
SwiftUI 中这些方法的替代方法是什么?
struct User {
var firstName: String
var lastName: String
}
struct UserRow: View {
var user: User
var body: some View {
Text("\(user.firstName) \(user.lastName)")
}
}
struct ContentView : View {
var body: some View {
let user1 = User(firstName: "Anjali", lastName: "User1")
let user2 = User(firstName: "XYZ", lastName: "User2")
return List {
UserRow(user: user1)
UserRow(user: user2)
}
}
}
Run Code Online (Sandbox Code Playgroud)
WWDC 中有一个视频简要说明了如何激活列表上的编辑模式以及如何移动项目。
您可以使用onMove
修改器来处理单元格重新排序,并EditButton()
激活编辑模式,该模式允许您手动移动单元格。
请注意,您不能onMove
在静态列表上使用该方法。该修饰符在协议中可用DynamicViewContent
,该协议由 实现ForEach
,但不是由 实现List
。
struct ContentView : View {
let users = [
User(firstName: "Anjali", lastName: "User1"),
User(firstName: "XYZ", lastName: "User2")
]
var body: some View {
NavigationView {
List {
ForEach(users.identified(by: \.firstName)) { user in
UserRow(user: user)
}.onMove(perform: move)
}
.navigationBarTitle(Text("Users"))
.navigationBarItems(trailing: EditButton())
}
}
func move(from source: IndexSet, to destination: Int) {
users.move(fromOffsets: source, toOffset: destination)
}
}
Run Code Online (Sandbox Code Playgroud)
要使其始终可拖动,而无需EditButton
将此修饰符添加到列表中:
.environment(\.editMode, Binding.constant(EditMode.active))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3715 次 |
最近记录: |