Florian Leitner
Florian Leitner

Reputation: 172

Popover does not appear when closed during TextField edit

I want to edit objects using popovers in my macOS application. But for some reason the popover does not appear anymore, when it was closed the popover while editing a TextField. (see gif bellow)

Any ideas, why this is happening?

enter image description here

Code:

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            SubView()
            SubView()
            SubView()
            }.padding()
    }
}

struct SubView: View {
    @State var showPopover = false
    var body: some View {
        VStack {
            Text("Label")
        }.onTapGesture {
            self.showPopover = true
        }
        .popover(isPresented: $showPopover, arrowEdge: .trailing) {
            Popover()
        }
    }
}

struct Popover: View {

    @State var test: String = ""

    var body: some View {
        TextField("Text", text: $test)
    }
}

Upvotes: 2

Views: 235

Answers (1)

Asperi
Asperi

Reputation: 257729

It looks like it is not enough one event to resign editor first responder and close previous popover, so state of following popover is toggled, but new popover is not allowed, because previous is still on-screen.

The following workaround is possible (tested & works with Xcode 11.2)

}.onTapGesture {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
        self.showPopover = true // delay activating new popover
    }
}

Also it is possible to consider design approach when there is only one popover bindable to models of different subviews (which seems to me more appropriate) and manageable by the one state.

Upvotes: 2

Related Questions