首页 > 解决方案 > 从 SwiftUI 中的图像选择器中选择图片后,无法单击“完成”按钮

问题描述

从图像选择器中选择图片后,我无法单击“完成”按钮。谁能解释为什么?

struct AddTodoView: View {
    @Environment(\.managedObjectContext) private var viewContext
    
    @Binding var showAddTodoView: Bool
    
    @State private var displayImagePicker = false //
    @State private var photoImage: Image?//
    @State private var photoUIImage: UIImage?//
    
    func getImage(){//
        if let image = photoUIImage{
            photoImage = Image(uiImage: image)
        }
    }
    
    @State private var name: String = ""
    @State private var selectedCategory = 0
    var categoryTypes = ["family","personal","work"]

    
    var body: some View {

        VStack{
            Text("Add Todo").font(.largeTitle)
            TextField("To Do name",text: $name)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .border(Color.black).padding()
            
            Text("Select Category")
            Picker("",selection: $selectedCategory){
                ForEach(0 ..< categoryTypes.count){
                    Text(self.categoryTypes[$0])
                }
            }.pickerStyle(SegmentedPickerStyle())
            //
            Button("Select Photo"){
                self.displayImagePicker = true
            }.padding()//
            photoImage?.resizable().scaledToFit()//
            
        }.padding()
        .sheet(isPresented: $displayImagePicker, onDismiss: getImage){//
            ImagePickerViewController(image: self.$photoUIImage)//
        }//
        
        Button(action: {
            print("pressed")
        },
        label: {
            Text("Done")
        })
    }
}

似乎焦点再次从主视图转到图像选择器视图。即 Button 中的 print("pressed") 不会被调用。

下面是我的 ImagePickerViewController。

struct ImagePickerViewController: UIViewControllerRepresentable{
    
    @Binding var image: UIImage?
    
    class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate{
        var parent: ImagePickerViewController
        init(_ parent: ImagePickerViewController){
            self.parent = parent
        }
        
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info:[UIImagePickerController.InfoKey : Any]){
            if let uiImage = info[.originalImage] as? UIImage{
                parent.image = uiImage
            }
            picker.dismiss(animated: true)
        }
    }    
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func makeUIViewController(context: Context) -> some UIViewController {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = context.coordinator
        return imagePicker
    }
    
    func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
        
    }
    
}

无法弄清楚出了什么问题。

标签: swiftuiuikit

解决方案


哦,是的,它工作正常。问题是由于另一行代码造成的。


推荐阅读