एक मोडल दिखाने के लिए (iOS 13 स्टाइल)
आपको बस sheet
खुद को खारिज करने की क्षमता के साथ एक सरल की आवश्यकता है:
struct ModalView: View {
@Binding var presentedAsModal: Bool
var body: some View {
Button("dismiss") { self.presentedAsModal = false }
}
}
और इसे इस तरह प्रस्तुत करें:
struct ContentView: View {
@State var presentingModal = false
var body: some View {
Button("Present") { self.presentingModal = true }
.sheet(isPresented: $presentingModal) { ModalView(presentedAsModal: self.$presentingModal) }
}
}
ध्यान दें कि मैंने presentingModal
मोडल को पारित कर दिया है ताकि आप इसे स्वयं मोडल से खारिज कर सकें, लेकिन आप इससे छुटकारा पा सकते हैं।
वास्तव में इसे प्रस्तुत करने के लिए fullscreen
(न केवल नेत्रहीन)
आप तक पहुँचने की जरूरत है ViewController
। तो आपको कुछ सहायक कंटेनरों और पर्यावरण सामग्री की आवश्यकता है:
struct ViewControllerHolder {
weak var value: UIViewController?
}
struct ViewControllerKey: EnvironmentKey {
static var defaultValue: ViewControllerHolder {
return ViewControllerHolder(value: UIApplication.shared.windows.first?.rootViewController)
}
}
extension EnvironmentValues {
var viewController: UIViewController? {
get { return self[ViewControllerKey.self].value }
set { self[ViewControllerKey.self].value = newValue }
}
}
फिर आपको इस एक्सटेंशन को लागू करने का उपयोग करना चाहिए:
extension UIViewController {
func present<Content: View>(style: UIModalPresentationStyle = .automatic, @ViewBuilder builder: () -> Content) {
let toPresent = UIHostingController(rootView: AnyView(EmptyView()))
toPresent.modalPresentationStyle = style
toPresent.rootView = AnyView(
builder()
.environment(\.viewController, toPresent)
)
self.present(toPresent, animated: true, completion: nil)
}
}
आखिरकार
आप इसे बना सकते हैं fullscreen
:
struct ContentView: View {
@Environment(\.viewController) private var viewControllerHolder: UIViewController?
var body: some View {
Button("Login") {
self.viewControllerHolder?.present(style: .fullScreen) {
Text("Main") // Or any other view you like
}
}
}
}
UIKit
। क्या आपके पास कोई विशेष कारण है?