在 swiftui 中显示导航到另一个视图的模态视图
Present modal view on navigation to another view in swiftui
如果这是一个重复的问题,请告诉我。
我正在开发一个带有照片选择器的应用程序。我在视图 A 上,上面有一个 + 按钮。当我点击 + 时,我想导航到视图 B。导航后,我想在视图 B 内自动显示照片选择器视图。我无法弄清楚如何显示 sheet在迅捷。
在 UIKit 中,在 viewcontroller B 的 viewdidappear 上,我将呈现 Pickerview。
这是我的代码
```import SwiftUI
struct ViewB: View {
@State private var showingImagePicker = false
@State private var uploadedPhotos = [UIImage]()
var body: some View {
VStack {
Button("Select Image") {
showingImagePicker = true
}
}
.sheet(isPresented: $showingImagePicker) {
PhotoPicker(photoList: $uploadedPhotos)
}
.onChange(of: uploadedPhotos) { _ in
}
}
}```
此代码是 ViewB,我将在点击 viewB 中的按钮时显示 pickerView。但我不想点击按钮,而是希望选择器出现在 ViewB
上
我想我明白了 -
struct CreateView: View {
@State private var image: Image?
@State private var showingImagePicker = false
@State private var uploadedPhotos = [UIImage]()
var body: some View {
ScrollView {
HStack {
image?.resizable().scaledToFit()
}
.onAppear {
showingImagePicker = true
}
.sheet(isPresented: $showingImagePicker) {
PhotoPicker(photoList: $uploadedPhotos)
}
.onChange(of: uploadedPhotos) { _ in
guard let uiImage = uploadedPhotos.first else {return}
image = Image(uiImage: uiImage)
}
}
}
}
这里的 PhotoPicker() 是我的自定义视图
SwiftUI 中有一个名为 .onAppear(perform:)
的视图修饰符,它是 UIKit viewDidAppear
的 SwiftUI 对应项,为您提供构建和显示 SwiftUI 视图的入口点。只需将此修饰符添加到视图 B(您正在呈现的 sheet 内的视图)。在您提供给修饰符的闭包中,您可以更改状态以根据需要显示选择器。
如果您希望选取器视图在视图出现后进行动画处理,声明过渡和动画上下文的适当位置是在用作选取器视图的视图上。
struct ViewB: View {
@State private var displayPicker = false
var body: some View {
VStack {
Text("This is View B")
if displayPicker {
PickerView()
.transition(.slide)
.animation(.easeInOut, value: displayPicker)
}
}
.onAppear {
displayPicker = true
}
}
}
在此处阅读有关修饰符的更多信息:
https://developer.apple.com/documentation/SwiftUI/AnyView/onAppear(perform:)
如果这是一个重复的问题,请告诉我。
我正在开发一个带有照片选择器的应用程序。我在视图 A 上,上面有一个 + 按钮。当我点击 + 时,我想导航到视图 B。导航后,我想在视图 B 内自动显示照片选择器视图。我无法弄清楚如何显示 sheet在迅捷。 在 UIKit 中,在 viewcontroller B 的 viewdidappear 上,我将呈现 Pickerview。 这是我的代码
```import SwiftUI
struct ViewB: View {
@State private var showingImagePicker = false
@State private var uploadedPhotos = [UIImage]()
var body: some View {
VStack {
Button("Select Image") {
showingImagePicker = true
}
}
.sheet(isPresented: $showingImagePicker) {
PhotoPicker(photoList: $uploadedPhotos)
}
.onChange(of: uploadedPhotos) { _ in
}
}
}```
此代码是 ViewB,我将在点击 viewB 中的按钮时显示 pickerView。但我不想点击按钮,而是希望选择器出现在 ViewB
上我想我明白了 -
struct CreateView: View {
@State private var image: Image?
@State private var showingImagePicker = false
@State private var uploadedPhotos = [UIImage]()
var body: some View {
ScrollView {
HStack {
image?.resizable().scaledToFit()
}
.onAppear {
showingImagePicker = true
}
.sheet(isPresented: $showingImagePicker) {
PhotoPicker(photoList: $uploadedPhotos)
}
.onChange(of: uploadedPhotos) { _ in
guard let uiImage = uploadedPhotos.first else {return}
image = Image(uiImage: uiImage)
}
}
}
}
这里的 PhotoPicker() 是我的自定义视图
SwiftUI 中有一个名为 .onAppear(perform:)
的视图修饰符,它是 UIKit viewDidAppear
的 SwiftUI 对应项,为您提供构建和显示 SwiftUI 视图的入口点。只需将此修饰符添加到视图 B(您正在呈现的 sheet 内的视图)。在您提供给修饰符的闭包中,您可以更改状态以根据需要显示选择器。
如果您希望选取器视图在视图出现后进行动画处理,声明过渡和动画上下文的适当位置是在用作选取器视图的视图上。
struct ViewB: View {
@State private var displayPicker = false
var body: some View {
VStack {
Text("This is View B")
if displayPicker {
PickerView()
.transition(.slide)
.animation(.easeInOut, value: displayPicker)
}
}
.onAppear {
displayPicker = true
}
}
}
在此处阅读有关修饰符的更多信息: https://developer.apple.com/documentation/SwiftUI/AnyView/onAppear(perform:)