我想在 EditMode 更改时执行操作。
具体来说,在编辑模式下,用户可以选择一些项目进行删除。之后他通常会按下垃圾箱按钮。但他也可能按“完成”。当他稍后再次按“编辑”时,先前选择的项目仍处于选中状态。我希望清除所有项目。
struct ContentView: View {
@State var isEditMode: EditMode = .inactive
@State var selection = Set<UUID>()
var items = [Item(), Item(), Item(), Item(), Item()]
var body: some View {
NavigationView {
List(selection: $selection) {
ForEach(items) { item in
Text(item.title)
}
}
.navigationBarTitle(Text("Demo"))
.navigationBarItems(
leading: EditButton(),
trailing: addDelButton
)
.environment(\.editMode, self.$isEditMode)
}
}
private var addDelButton: some View {
if isEditMode == .inactive {
return Button(action: reset) {
Image(systemName: "plus")
}
} else {
return Button(action: reset) { …
Run Code Online (Sandbox Code Playgroud) 我正在使用 NavigationView 和 NavigationLinks 从 MasterView 移动到 Detail1View,然后进一步移动到 Detail2View。
在处于纵向模式的 iPhone 上,所有细节视图都会显示后退按钮,并允许从 Detail2View 向后移动到 Detail1View,然后进一步移动到 MasterView。
但是在横向模式的 iPhone 或 iPad 上,当从 Detail1View 移动到 Detail2View 时,没有后退按钮。因此不可能回到Detail1View。
添加第二个 NavigationView 允许有一个后退按钮,但这并不是一个理想的解决方法,因为第二个 UINavigationViewController 显示在第一个下方。
struct MyMasterView: View {
private let names = ["Homer", "Marge", "Bart", "Lisa"]
var body: some View {
List() {
Section(header: Text("The Simpsons")) {
ForEach(names, id: \.self) { name in
NavigationLink(destination: MyDetail1View(name: name)) {
Text(name)
}
}
}
}
.navigationBarTitle(Text("My App"))
}
}
struct MyDetail1View: View {
var name: String
var …
Run Code Online (Sandbox Code Playgroud)