SwiftUI实战-多图选择、图片选择器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SwiftUI实战-多图选择、图片选择器相关的知识,希望对你有一定的参考价值。

参考技术A 主要实现多图选取,满足日常开发多图上传功能

效果图

从 SwiftUI 中的图像选择器中选择图片后,无法单击“完成”按钮

【中文标题】从 SwiftUI 中的图像选择器中选择图片后,无法单击“完成”按钮【英文标题】:After selecting a picture from the image picker in SwiftUI, unable to click on 'Done' button 【发布时间】:2021-01-09 06:14:19 【问题描述】:

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

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) 
        
    
    

不知道出了什么问题。

【问题讨论】:

为避免猜测,请提供独立的可重现示例。 将 ImagePickerViewController 添加到我的原始帖子中。希望对您有所帮助! 在我的系统中完美运行。 在我选择一张照片后,选择器关闭,我无法点击“完成”。但如果我只是创建待办事项而不选择照片,我可以毫无问题地点击“完成”。仅当我选择照片时才会出现问题 对我来说很好。当我点击按钮时,“按下”出现在控制台日志中。这是您在代码中的唯一操作。 【参考方案1】:

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

【讨论】:

以上是关于SwiftUI实战-多图选择、图片选择器的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 图片/视频选择器(支持拍照及录制视频)

react-native多图选择图片裁剪(支持ad/ios图片个数控制)

日期选择器按钮 / Swiftui

SwiftUI实战之多组选择器Picker(2020教程)

如何将多图像选择器与 Flutter Image Compress 一起使用?

andriod 图片选择器