После выбора изображения из средства выбора изображений в SwiftUI невозможно нажать кнопку «Готово»

#swiftui #uikit

#swiftui #uikit

Вопрос:

После выбора изображения в окне выбора изображений я не могу нажать на кнопку «Готово». Кто-нибудь может объяснить почему?

 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")
        })
    }
}
 

Кажется, что фокус снова переместился с основного вида на вид средства выбора изображений. т.е. печать («нажата») на кнопке не вызывается.

Ниже приведен мой 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) {
        
    }
    
}
 

не могу понять, что не так.

Комментарии:

1. Чтобы избежать догадок, пожалуйста, предоставьте отдельный воспроизводимый пример.

2. добавлен imagepickerviewcontroller к моему исходному сообщению. Надеюсь, это поможет!

3. в моей системе работает отлично.

4. после того, как я выбираю фотографию, и средство выбора отклоняется, я не могу нажать «Готово». Но если я просто создам задачу, не выбирая фотографию, я могу без проблем нажать «Готово». Проблема возникает только при выборе фотографии

5. У меня все работает нормально. «нажата» появляется в журнале консоли, когда я нажимаю на кнопку. это единственное действие, которое у вас есть в вашем коде.

Ответ №1:

о да, все работает нормально. проблема была связана с другой строкой кода.