Eu tenho uma visualização SwiftUI envolvida UIHostingController
e apresentada modalmente como formSheet
no iPad. Eu tenho um botão concluído para descartar e um fechamento de retorno de chamada é passado do controlador de visualização pai para executar ações quando esse botão concluído é pressionado. O problema acontece no iPad, onde o usuário pode tocar fora da visualização e a visualização é descartada, perdendo assim o retorno de chamada.
Uma maneira de resolver isso seria acionar o fechamento de retorno de chamada na onDismiss
visualização SwiftUI. Embora funcione, não tenho certeza se é o lugar certo e se é confiável o suficiente. A documentação só diz que onDismiss
é chamado quando a "visualização desaparece da tela". No entanto, e se colocarmos uma visualização no topo dessa visualização em uma hierarquia de navegação, ela onDismiss
ainda será chamada?
Pela sua descrição, presumo que você tenha uma visualização SwiftUI como esta:
Ao apresentar o controlador de hospedagem, você pode definir seu
presentationController
delegado e implementar o método delegadopresentationControllerDidDismiss
. Por exemplo:presentationControllerDidDismiss
será chamado quando a planilha for totalmente dispensada, e não quando o usuário "começa" a dispensá-la (o que pode ser detectado compresentationControllerWillDismiss
), pois nesse ponto o usuário pode mudar de ideia e parar de dispensar.Como diz a documentação,
presentationControllerDidDismiss
não é chamado quando a planilha é descartada programaticamente, então você ainda precisa passar o retorno de chamada para a visualização do SwiftUI.Observe também que você pode definir:
para forçar o usuário a descartar a planilha usando o botão Concluído.