ऐसा करने के कई तरीके हैं, और मुझे लगता है कि हर एक एक प्रोजेक्ट के लिए फिट हो सकता है, लेकिन दूसरा नहीं, इसलिए मैंने सोचा कि मैं उन्हें यहां रखूंगा, हो सकता है कि कोई दूसरा किसी अलग मामले में चले।
1- ओवरराइड वर्तमान
यदि आपके पास एक है BaseViewController
तो आप present(_ viewControllerToPresent: animated flag: completion:)
विधि को ओवरराइड कर सकते हैं ।
class BaseViewController: UIViewController {
// ....
override func present(_ viewControllerToPresent: UIViewController,
animated flag: Bool,
completion: (() -> Void)? = nil) {
viewControllerToPresent.modalPresentationStyle = .fullScreen
super.present(viewControllerToPresent, animated: flag, completion: completion)
}
// ....
}
इस तरह से आपको किसी भी present
कॉल पर कोई भी बदलाव करने की आवश्यकता नहीं है , क्योंकि हम सिर्फ present
विधि को ओवररोड करते हैं ।
2- एक विस्तार:
extension UIViewController {
func presentInFullScreen(_ viewController: UIViewController,
animated: Bool,
completion: (() -> Void)? = nil) {
viewController.modalPresentationStyle = .fullScreen
present(viewController, animated: animated, completion: completion)
}
}
उपयोग:
presentInFullScreen(viewController, animated: true)
3- एक यूआईईवीवाईसींट्रोलर के लिए
let viewController = UIViewController()
viewController.modalPresentationStyle = .fullScreen
present(viewController, animated: true, completion: nil)
4- स्टोरीबोर्ड से
एक सेगमेंट का चयन करें और प्रस्तुति को सेट करें FullScreen
।
5- झूलना
extension UIViewController {
static func swizzlePresent() {
let orginalSelector = #selector(present(_: animated: completion:))
let swizzledSelector = #selector(swizzledPresent)
guard let orginalMethod = class_getInstanceMethod(self, orginalSelector), let swizzledMethod = class_getInstanceMethod(self, swizzledSelector) else{return}
let didAddMethod = class_addMethod(self,
orginalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self,
swizzledSelector,
method_getImplementation(orginalMethod),
method_getTypeEncoding(orginalMethod))
} else {
method_exchangeImplementations(orginalMethod, swizzledMethod)
}
}
@objc
private func swizzledPresent(_ viewControllerToPresent: UIViewController,
animated flag: Bool,
completion: (() -> Void)? = nil) {
if #available(iOS 13.0, *) {
if viewControllerToPresent.modalPresentationStyle == .automatic {
viewControllerToPresent.modalPresentationStyle = .fullScreen
}
}
swizzledPresent(viewControllerToPresent, animated: flag, completion: completion)
}
}
उपयोग:
अपने में AppDelegate
अंदर application(_ application: didFinishLaunchingWithOptions)
इस पंक्ति जोड़ें:
UIViewController.swizzlePresent()
इस तरह से आपको किसी भी कॉल पर कोई बदलाव करने की आवश्यकता नहीं है, क्योंकि हम रनटाइम में वर्तमान पद्धति को लागू कर रहे हैं।
यदि आपको यह जानना आवश्यक है कि आप क्या कर रहे हैं, तो आप इस लिंक को देख सकते हैं:
https://nshipster.com/swift-objc-runtion/
fullScreen
विकल्प डिफ़ॉल्ट रूप तोड़ने यूआई परिवर्तन रोकने के लिए किया जाना चाहिए।