ios - आईओएस 8 का उपयोग कर आईपैड पर यूआईएलर्ट कंट्रोलर को ठीक से प्रस्तुत करना




ipad user-interface (4)

आईपैड पर नए यूआईपीओपीओवर प्रस्तुति नियंत्रक का उपयोग करके एक पॉपओवर के रूप में अलर्ट प्रदर्शित किया जाएगा, इसके लिए आपको एक स्रोत दृश्य और स्रोतरेट या बारबटन इटिम का उपयोग करके पॉपओवर की प्रस्तुति के लिए एंकर पॉइंट निर्दिष्ट करना होगा

  • barButtonItem
  • sourceView
  • sourceRect

एंकर पॉइंट निर्दिष्ट करने के लिए आपको UIAlertController के UIPopoverPresentationController का संदर्भ प्राप्त करना होगा और गुणों में से एक को निम्नानुसार सेट करना होगा:

alertController.popoverPresentationController.barButtonItem = button;

नमूना कोड:

UIAlertAction *actionDelete = nil;
UIAlertAction *actionCancel = nil;

// create action sheet
UIAlertController *alertController = [UIAlertController
                                      alertControllerWithTitle:actionTitle message:nil
                                      preferredStyle:UIAlertControllerStyleActionSheet];

// Delete Button
actionDelete = [UIAlertAction
                actionWithTitle:NSLocalizedString(@"IDS_LABEL_DELETE", nil)
                style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {

                    // Delete
                    // [self deleteFileAtCurrentIndexPath];
                }];

// Cancel Button
actionCancel = [UIAlertAction
                actionWithTitle:NSLocalizedString(@"IDS_LABEL_CANCEL", nil)
                style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
                    // cancel
                    // Cancel code
                }];

// Add Cancel action
[alertController addAction:actionCancel];
[alertController addAction:actionDelete];

// show action sheet
alertController.popoverPresentationController.barButtonItem = button;
alertController.popoverPresentationController.sourceView = self.view;

[self presentViewController:alertController animated:YES
                 completion:nil];

आईओएस 8.0 के साथ, ऐप्पल ने UIAlertController को बदलने के लिए UIAlertController शुरुआत की। दुर्भाग्यवश, ऐप्पल ने इसे पेश करने के तरीके पर कोई जानकारी नहीं जोड़ा। मुझे हायाजीक के ब्लॉग पर इसके बारे में एक entry मिली, हालांकि, यह आईपैड पर काम नहीं कर रहा है। दृश्य पूरी तरह से गलत है:

गलत:

सही बात:

मैं इंटरफ़ेस पर दिखाने के लिए निम्न कोड का उपयोग करता हूं:

    let alert = UIAlertController()
    // setting buttons
    self.presentModalViewController(alert, animated: true)

क्या आईपैड के लिए इसे जोड़ने का कोई और तरीका है? या ऐप्पल ने सिर्फ आईपैड को भूल लिया, या लागू नहीं किया, अभी तक?


आप UIAlertController का उपयोग करके एक UIAlertController से UIAlertController प्रस्तुत कर सकते हैं।

ओब्जे-सी में:

UIViewController *self; // code assumes you're in a view controller
UIButton *button; // the button you want to show the popup sheet from

UIAlertController *alertController;
UIAlertAction *destroyAction;
UIAlertAction *otherAction;

alertController = [UIAlertController alertControllerWithTitle:nil
                                                      message:nil
                           preferredStyle:UIAlertControllerStyleActionSheet];
destroyAction = [UIAlertAction actionWithTitle:@"Remove All Data"
                                         style:UIAlertActionStyleDestructive
                                       handler:^(UIAlertAction *action) {
                                           // do destructive stuff here
                                       }];
otherAction = [UIAlertAction actionWithTitle:@"Blah"
                                       style:UIAlertActionStyleDefault
                                     handler:^(UIAlertAction *action) {
                                         // do something here
                                     }];
// note: you can control the order buttons are shown, unlike UIActionSheet
[alertController addAction:destroyAction];
[alertController addAction:otherAction];
[alertController setModalPresentationStyle:UIModalPresentationPopover];

UIPopoverPresentationController *popPresenter = [alertController 
                                              popoverPresentationController];
popPresenter.sourceView = button;
popPresenter.sourceRect = button.bounds;
[self presentViewController:alertController animated:YES completion:nil];

स्विफ्ट 2 में, आप इसे आईफोन और आईपैड पर ठीक से दिखाने के लिए ऐसा कुछ करना चाहते हैं:

func confirmAndDelete(sender: AnyObject) {
    guard let button = sender as? UIView else {
        return
    }

    let alert = UIAlertController(title: NSLocalizedString("Delete Contact?", comment: ""), message: NSLocalizedString("This action will delete all downloaded audio files.", comment: ""), preferredStyle: .ActionSheet)
    alert.modalPresentationStyle = .Popover

    let action = UIAlertAction(title: NSLocalizedString("Delete", comment: ""), style: .Destructive) { action in
        EarPlaySDK.deleteAllResources()
    }
    let cancel = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .Cancel) { action in

    }
    alert.addAction(cancel)
    alert.addAction(action)

    if let presenter = alert.popoverPresentationController {
        presenter.sourceView = button
        presenter.sourceRect = button.bounds
    }
    presentViewController(alert, animated: true, completion: nil)
}

यदि आप प्रेजेंटर सेट नहीं करते हैं, तो आप निम्नलिखित संदेश के साथ आईपैड -[UIPopoverPresentationController presentationTransitionWillBegin] पर एक अपवाद के साथ समाप्त हो जाएंगे:

घातक अपवाद: NSGenericException आपके एप्लिकेशन ने UIAlertControllerStyleActionSheet शैली के UIAlertController (<UIAlertController: 0x17858a00>) प्रस्तुत किया है। इस शैली के साथ एक UIAlertController का modalPresentationStyle UIModalPresentationPopover है। आपको इस पॉपओवर के लिए अलर्ट कंट्रोलर के पॉपओवर प्रस्तुति नियंत्रक के माध्यम से स्थान जानकारी प्रदान करनी होगी। आपको या तो स्रोत दृश्य और स्रोत संदर्भ या बारबटन इटिम प्रदान करना होगा। यदि आप सूचना चेतावनी प्रस्तुत करते समय यह जानकारी ज्ञात नहीं है, तो आप इसे UIPopoverPresentationControllerDelegate विधि -prepareForPopoverPresentation में प्रदान कर सकते हैं।


स्विफ्ट 3.0 और उच्चतर के लिए अद्यतन करें

    let actionSheetController: UIAlertController = UIAlertController(title: "SomeTitle", message: nil, preferredStyle: .actionSheet)

    let editAction: UIAlertAction = UIAlertAction(title: "Edit Details", style: .default) { action -> Void in

        print("Edit Details")
    }

    let deleteAction: UIAlertAction = UIAlertAction(title: "Delete Item", style: .default) { action -> Void in

        print("Delete Item")
    }

    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in }

    actionSheetController.addAction(editAction)
    actionSheetController.addAction(deleteAction)
    actionSheetController.addAction(cancelAction)

//        present(actionSheetController, animated: true, completion: nil)   // doesn't work for iPad

    actionSheetController.popoverPresentationController?.sourceView = yourSourceViewName // works for both iPhone & iPad

    present(actionSheetController, animated: true) {
        print("option menu presented")
    }






uialertcontroller