【发布时间】:2021-04-26 17:33:50
【问题描述】:
这可能是一个很简单的问题,但我找不到答案。
我正在尝试构建一个带有两个按钮(以及一个取消按钮)的 ActionSheet:
- “从图库中选择”按钮打开一个
imagePicker,其中sourceType设置为.photoLibrary。 - “拍一张新照片”按钮打开一个
imagePicker,sourceType设置为.camera。
我已经成功地制作了 ActionSheet 和 imagePicker,但是无法确定在哪里添加修饰符来告诉每个按钮应该使用哪个 sourceType。我设法将它添加到 ActionSheet 之外的 sheet() 修饰符中的普通按钮中,一切正常:
Button(action: {
self.show.toggle()
})
{Text("Take a new picture")}
.sheet(isPresented: self.$show, content: {
ImagePicker(sourceType: .camera, show: self.$show, image: self.$imageTemp)
})
但是,我看不到在 ActionSheet 中的何处包含此信息。非常感谢任何可以提供帮助的人,我希望这很清楚:-)
这是我的代码:
struct ContentView: View {
@State private var showingActionSheet = false
@State var imageTemp : Data = (UIImage(systemName: "photo.on.rectangle.angled")?.jpegData(compressionQuality: 1))!
var body: some View {
NavigationView {
Image(uiImage: UIImage(data: imageTemp)!)
.onTapGesture {
self.showingActionSheet = true
}
.actionSheet(isPresented: $showingActionSheet) {
ActionSheet(title: Text("Image selector"), message: Text("Select an image"), buttons: [
.default(Text("Select from Gallery"))
{
self.show.toggle()
},
.default(Text("Take new picture")) {
self.show.toggle()
},
.cancel()
]
)
}
}
}
}
而且,以防万一,这是我的 imagePicker 的代码,尽管我认为这可能没有必要。
struct ImagePicker: UIViewControllerRepresentable {
var sourceType: UIImagePickerController.SourceType = .photoLibrary
@Binding var show: Bool
@Binding var image: Data
func makeCoordinator() -> ImagePicker.Coordinator {
let imagePicker = UIImagePickerController()
return ImagePicker.Coordinator(child1: self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.sourceType = sourceType
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
}
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var child : ImagePicker
init(child1: ImagePicker) {
child = child1
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.child.show.toggle()
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
let image = info[.originalImage]as! UIImage
let data = image.jpegData(compressionQuality: 0.45)
self.child.image = data!
self.child.show.toggle()
}
}
}
【问题讨论】:
标签: swiftui imagepicker swiftui-actionsheet