When I use PHPicker in SwiftUI, I want to return to Tab where I opened PHPicker, but it returns to the initial TabView screen.

Asked 2 years ago, Updated 2 years ago, 92 views

Use PHPicker in TabView's child view to return to the first Tab specified in the State in TabView instead of the original child view after using PHPicker.

When I close PHPicker, I use dismiss to close the screen as shown in the code below, and I am trying to figure out how to return to the original screen.

Please let me know if anyone knows.

ContentView:

struct ContentView:View {

enum Tabs:String {
    case tab1 = "FirstView"
    case tab2 = "SecondView"
    case tab3 = "Account"
}

func returnNavigationTitle (tabSelection:Tabs) - > String {
    switch tabSelection {
    case.tab1:
        return "FirstView"
    case.tab2:
        return "SecondView"
    case.tab3:
        return "Account"
    }
}

@State private var navigationTitle: String=Tabs.tab1.rawValue
@StatevartabSelection:Tabs=.tab1

varbody:someView {
    TabView (selection:$tabSelection) {
        FirstView()
            .tabItem{
                Image(systemName: "house.fill")
                Text (Tabs.tab1.rawValue)
            }.tag(1)//.tabItem
        SecondView()
            .tabItem{
                Image(systemName: "list.bullet")
                Text (Tabs.tab2.rawValue)
            }.tag(2)//.tabItem
        PhotoPickerView()
            .tabItem{
                Image(systemName: "person.circle")
                Text (Tabs.tab3.rawValue)
            }.tag(3)//.tabItem
    } .accentColor (.blue)
}

ImagePicker:

struct ImagePicker:UIViewControllerRepresentable{

@Environment(\.presentationMode) private var presentationMode
varsourceType:UIImagePickerController.SourceType=.photoLibrary
@Binding var selectedImage:UIImage

func makeUIViewController(context:UIViewControllerRepresentableContext<ImagePicker>)->UIImagePickerController{
    
    let imagePicker=UIImagePickerController()
    imagePicker.allowsEditing=true
    imagePicker.sourceType=sourceType
    imagePicker.delegate=context.coordinator
    
    return imagePicker
}

US>func updateUIViewController(_uiViewController:UIImagePickerController, context:UIViewControllerRepresentableContext<ImagePicker>){
    
}

func makeCoordinator()->Coordinator {
    Coordinator (self)
}

final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate{
    
    var parent —ImagePicker
    
    init(_parent:ImagePicker){
        self.parent = parent
    }
    
    funcimagePickerController(_picker:UIImagePickerController, didFinishPickingMediaWithInfo:[UIImagePickerController.InfoKey:Any]){
        
        iflet image=info [UIImagePickerController.InfoKey.originalImage] as?UIImage{
            parent.selectedImage=image
        }
        
        parent.presentationMode.wrappedValue.dismiss()
    }
    
}

PhotoPickerView:

struct PhotoPickerView:View {

@State private var isShowingPhotoPicker=false
@State private var avatarImage=UIImage(named: "default-avatar")!

varbody:someView {
    VStack {
        Image(uiImage:avaterImage)
            .resizable()
            .scaledToFit()
            .frame (width: 150, height: 150)
            .clipShape (Circle())
            .padding()
            .onTapGesture{
                isShowingPhotoPicker=true
            }
        
        Spacer()
    }
    .navigationTitle ("Profile")
    .sheet(isPresented:$isShowingPhotoPicker, content:{
        ImagePicker (sourceType:.photoLibrary, selectedImage:self.$avaterImage)
        // PhotoPicker (avaterImage: $avaterImage)
    })
}

Development Environment:
Xcode 13.3
Swift5

swift swiftui swift5

2022-09-30 11:19

1 Answers

Invalid tag configuration.
TabView selection and .tag() must be the same.

.tag(Tabs.tab1)


2022-09-30 11:19

If you have any answers or tips


© 2024 OneMinuteCode. All rights reserved.