ios - वर्तमान UIAlertController AppDelegate से




objective-c (5)

आप इस कोड का उपयोग तब भी कर सकते हैं जब आप इसे doFinishLaunchingWithOptions से लॉन्च करना चाहते हैं। यह मदद करता है।

dispatch_async(dispatch_get_main_queue(), {
              let importantAlert: UIAlertController = UIAlertController(title: "Action Sheet", message: "Hello I was presented from appdelegate ;)", preferredStyle: .ActionSheet)
            self.window?.rootViewController?.presentViewController(importantAlert, animated: true, completion: nil)
        })

इस सवाल का पहले से ही यहाँ एक जवाब है:

मैं अपने iOS ऐप में AppDelegate से एक UIAlertController पेश करने की कोशिश कर रहा हूं। नीचे चेतावनी और वर्तमान विधि है।

UIAlertController *alert = [UIAlertController alertControllerWithTitle:cTitle message:cMessage preferredStyle:UIAlertControllerStyleAlert];

//Configure alert and actions

[self.window.rootViewController presentViewController:alert animated:TRUE completion:nil];

हालाँकि, जब मैं अलर्ट प्रस्तुत करने का प्रयास करता हूं, तो यह प्रकट नहीं होता है और मुझे कंसोल में निम्न चेतावनी मिलती है।

Warning: Attempt to present <UIAlertController: 0x145f5d60> on <UINavigationController: 0x146590f0> whose view is not in the window hierarchy!

त्रुटि क्या है और मैं इसे कैसे ठीक करूं?


आप इसे viewDidLoad बजाय viewDidAppear में कॉल करने का प्रयास कर सकते हैं। मेरे पास एक समान त्रुटि थी और इसने इसे ठीक कर दिया।


कुछ का उपयोग करना बेहतर है:

var hostVC = self.window?.rootViewController

while let next = hostVC?.presentedViewController {
    hostVC = next
}

hostVC?.presentViewController(alertController, animated: true, completion: nil)

यदि आप पहले से ही मोडल व्यू कंट्रोलर प्रस्तुत कर रहे हैं तो पिछले उत्तर काम नहीं करेंगे।


चेतावनी नियंत्रक का उपयोग करना:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
dispatch_async(dispatch_get_main_queue(), {

    //INTERNET NOT AVAILABLE ALERT
    var internetUnavailableAlertController = UIAlertController (title: "Network Unavailable", message: "Please check your internet connection settings and turn on Network Connection", preferredStyle: .Alert)

    var settingsAction = UIAlertAction(title: "Settings", style: .Default) { (_) -> Void in
        let settingsUrl = NSURL(string: UIApplicationOpenSettingsURLString)
        if let url = settingsUrl {
            UIApplication.sharedApplication().openURL(url)
        }
    }
    var cancelAction = UIAlertAction(title: "Okay", style: .Default, handler: nil)
    internetUnavailableAlertController .addAction(settingsAction)
    internetUnavailableAlertController .addAction(cancelAction)
    self.window?.rootViewController!.presentViewController(internetUnavailableAlertController , animated: true, completion: nil)
    })

AlertView का उपयोग करना:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    dispatch_async(dispatch_get_main_queue(), {

        //INTERNET NOT AVAILABLE ALERTVIEW

        let internetUnavailableAlert =  UIAlertView(title: "Network Unavailable", message: "Please check your internet connection settings and turn on Network Connection", delegate: self, cancelButtonTitle: "Okay")
        internetUnavailableAlert.show()
        })

  return true
 }
}

विंडो के उठने से पहले आप उसे कॉल करते हैं और नेविगेशनकंट्रोलर वास्तव में दिखाया जाता है:

"चेतावनी: जिस पर खिड़की पदानुक्रम में नहीं है, उसे प्रस्तुत करने का प्रयास करें!"

संभावना है कि आप ApplicationDidFinishLaunching में ऐसा करते हैं?

आइटर प्रतीक्षा करें .. जैसे यह तब होता है जब दृश्य वास्तव में प्रकट होता है

या

एक 'हैक' अपने आप को देखने और खिड़की को मजबूर करने के लिए होगा:

[self.window addSubview:self.rootViewController.view];
[self.window makeKeyAndVisible];






uialertcontroller