मैं स्विफ्ट में UIAlertView कैसे बनाऊंगा?


481

मैं स्विफ्ट में एक UIAlertView बनाने के लिए काम कर रहा हूं, लेकिन किसी कारण से मुझे यह कथन सही नहीं मिल रहा है क्योंकि मुझे यह जानकारी मिल रही है:

आपूर्ति किए गए तर्कों को स्वीकार करने वाले 'init' के लिए अधिभार नहीं मिला

यहाँ मैंने इसे कैसे लिखा है:

let button2Alert: UIAlertView = UIAlertView(title: "Title", message: "message",
                     delegate: self, cancelButtonTitle: "OK", otherButtonTitles: nil)

फिर इसे कॉल करने के लिए मैं उपयोग कर रहा हूं:

button2Alert.show()

जैसा कि अभी यह दुर्घटनाग्रस्त है और मैं अभी वाक्यविन्यास अधिकार प्राप्त नहीं कर सकता।


5
UIAlertViewऔर iOS 8 में UIActionSheetबदल दिया गया UIAlertControllerहै, क्या आपने इसे देखा है?
पोपेय

सुनिश्चित करें कि वह वर्ग जो selfप्रोटोकॉल को अपनाता है UIAlertViewDelegate(स्विफ्ट में, ऐसा करने के लिए अनुशंसित तरीका विस्तार के साथ है)।
निकोलस मिआरी जूल

@ एडम: मैंने आपकी रीटैगिंग को वापस ले लिया है। Swift3 टैग के लिए है "सीधे एप्पल स्विफ्ट प्रोग्रामिंग भाषा का संस्करण 3 में परिवर्तन से संबंधित प्रश्न।" और मुझे नहीं लगता कि "यदि उत्तर स्पष्ट करते हैं कि प्रश्न में समस्या कुछ और के कारण होती है, जो पूछने वाले ने सोचा था, तो फिर से मदद करना बहुत मददगार है।" meta.stackoverflow.com/questions/252079/… से यहां लागू होता है।
मार्टिन आर।

1
@MartinR मुझे नहीं पता कि सवालों को अपडेट करने के लिए कैसे अपडेट किया जा सकता है कि स्विफ्ट के वर्तमान संस्करण पर लागू होने वाले उत्तर हैं; यहाँ बहुत सारा पुराना, बेकार सामान है और [स्विफ्ट] यह सब उपयोगी के साथ मिल जाता है। मैं इस रीटैग के वापस होने के बारे में दृढ़ता से महसूस नहीं करता हूं, लेकिन मैं चाहता हूं कि इस समस्या को हल करने का एक निश्चित तरीका था। (मुझे लगता है कि जवाब टैग थे।)
एडम एबेरबेक

जवाबों:


897

से UIAlertViewवर्ग:

// UIAlertView को हटा दिया गया है। इसके बजाय UIAlertControllerStyleAlert की पसंद के साथ UIAlertController का उपयोग करें

IOS 8 पर, आप यह कर सकते हैं:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

अब आईओएस 8 पर UIAlertControllerहमें UIAlertViews और UIActionSheets के रूप में जो कुछ भी पता था, उसे बनाने और बातचीत करने के लिए एक एकल वर्ग है ।

संपादित करें: क्रियाओं को संभालने के लिए:

alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in
    switch action.style{
    case .Default:
        print("default")

    case .Cancel:
        print("cancel")

    case .Destructive:
        print("destructive")
    }
}}))

स्विफ्ट 3 के लिए संपादित करें:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)

स्विफ्ट के लिए संपादित करें 4.x:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
      switch action.style{
      case .default:
            print("default")

      case .cancel:
            print("cancel")

      case .destructive:
            print("destructive")


}}))
self.present(alert, animated: true, completion: nil)

3
आपने कहां देखा कि UIAlertView को हटा दिया गया है? मैं दस्तावेज में नहीं देख रहा हूँ?
ब्लूबियर

9
Cmd + UIAlertViewवर्ग पर क्लिक करें , और टिप्पणी कक्षा घोषणा के शीर्ष पर सही है।
ऑस्कर स्वानोस

2
मैं किसी और के लिए अपने स्वयं के प्रश्न का उत्तर दूंगा, जो जिज्ञासु सतर्क है ।addAction (UIAlertAction (शीर्षक: "रद्द करें", शैली: UIAlertActionStyle.Cancel, हैंडलर: {(ACTION: UIAlertAction!) In}))
altyus

5
रद्द करने और विनाशकारी मामलों की बात क्या है क्योंकि यह हमेशा वही होगा जो आपने निर्दिष्ट किया था .Default?
उपयोगकर्ता

4
इस उत्तर को पढ़कर आपने जो स्विच केस किया वह अनावश्यक है । स्विच केवल तभी उपयोगी होता है जब प्रकार, या शीर्षक हार्डकोड नहीं होते हैं अर्थात वे गतिशील होते हैं: आपके पास डायनामिक बटन की एक श्रृंखला हो सकती है, इसलिए शीर्षक हार्डकोड नहीं होते हैं। और फिर हैंडलर को चुने हुए शीर्षक को कुछ अन्य विधि कॉल के लिए पारित करने की आवश्यकता हो सकती है
हनी

465

एक बटन

एक बटन स्क्रीनशॉट

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

दो बटन

दो बटन अलर्ट स्क्रीनशॉट

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "UIAlertController", message: "Would you like to continue learning how to use iOS alerts?", preferredStyle: UIAlertController.Style.alert)

        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

तीन बटन

यहाँ छवि विवरण दर्ज करें

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "Notice", message: "Lauching this missile will destroy the entire universe. Is this what you intended to do?", preferredStyle: UIAlertController.Style.alert)

        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Remind Me Tomorrow", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil))
        alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertAction.Style.destructive, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

हैंडलिंग बटन नल

handlerथा nilकि उपरोक्त उदाहरण में। उपयोगकर्ता द्वारा एक बटन टैप करने पर आप कुछ करने के लिए nilएक क्लोजर से बदल सकते हैं । उदाहरण के लिए:

alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertAction.Style.destructive, handler: { action in

    // do something like...
    self.launchMissile()

}))

टिप्पणियाँ

  • कई बटन को विभिन्न UIAlertAction.Styleप्रकारों का उपयोग करने की आवश्यकता नहीं है । वे सभी हो सकते हैं .default
  • तीन से अधिक बटन के लिए एक्शन शीट का उपयोग करने पर विचार करें। सेटअप बहुत समान है। यहाँ एक उदाहरण है।

2
क्या UIAlertController में कोई प्रतिनिधि संपत्ति है? UIAlertView में एक प्रतिनिधि संपत्ति है जिसे हम कुछ समय के लिए स्वयं सेट करते हैं, क्या UIAlertController में ऐसा कुछ भी नहीं है ?? मैं नया हूं, कृपया मेरी मदद करें
ArgaPK

सुंदर उत्तर - अब हम हैंडलर के भीतर एक नए दृश्य पर कैसे स्विच कर सकते हैं?
That1Guy

114

आप मानक निर्माणकर्ता का उपयोग करके एक UIAlert बना सकते हैं, लेकिन 'विरासत' काम नहीं करती है:

let alert = UIAlertView()
alert.title = "Alert"
alert.message = "Here's a message"
alert.addButtonWithTitle("Understood")
alert.show()

8
UIAlertView को हटा दिया गया है। इसके बजाय UIAlertControllerStyleAlert की पसंद के साथ UIAlertController का उपयोग करें।
जोरायर

16
@Zorayr UIAlertController केवल iOS 8 के बाद से उपलब्ध है, कृपया यह भी उल्लेख करें कि इसके उपयोग का सुझाव कब दें। ऐसी परिस्थितियां हैं जहां iOS7 समर्थन अभी भी वांछित है और लोग समस्या को याद कर सकते हैं। पदावनति का मतलब यह नहीं है कि "अब कभी भी इसका उपयोग न करें।"
सामी कुहोमेन

2
यह तब काम करता है जब आपका ऐप अभी भी iOS 7 को टारगेट कर रहा है। हालांकि, आदर्श रूप से UIAlertView का उपयोग केवल तभी किया जाना चाहिए जब UIAlertController उपलब्ध न हो। अगर NSClassFromString ("UIAlertController")! = nil {/ * UIAlertController * /} का उपयोग करें {/ * UIAlertView का उपयोग करें * /}
phatblat 16:59

UIAlertView () अब आईओएस 9 में पदावनत किया गया है
रिजवान अहमद

31

स्विफ्ट 4.2 और एक्सकोड 10 में

विधि 1:

सरल ALERT

let alert = UIAlertController(title: "Your title", message: "Your message", preferredStyle: .alert)

     let ok = UIAlertAction(title: "OK", style: .default, handler: { action in
     })
     alert.addAction(ok)
     let cancel = UIAlertAction(title: "Cancel", style: .default, handler: { action in
     })
     alert.addAction(cancel)
     DispatchQueue.main.async(execute: {
        self.present(alert, animated: true)
})

विधि 2:

शेयर क्लास के साथ ALERT

यदि आप साझा वर्ग शैली चाहते हैं (एक बार हर जहाँ उपयोग करें लिखें)

import UIKit
class SharedClass: NSObject {//This is shared class
static let sharedInstance = SharedClass()

    //Show alert
    func alert(view: UIViewController, title: String, message: String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert.addAction(defaultAction)
        DispatchQueue.main.async(execute: {
            view.present(alert, animated: true)
        })
    }

    private override init() {
    }
}

अब हर वेयर में इस तरह से अलर्ट करें

SharedClass.SharedInstance.alert(view: self, title: "Your title here", message: "Your message here")

विधि 3:

वर्तमान में सभी विन्दुओं के शीर्ष

यदि आप सभी दृश्यों के शीर्ष पर अलर्ट प्रस्तुत करना चाहते हैं, तो इस कोड का उपयोग करें

func alertWindow(title: String, message: String) {
    DispatchQueue.main.async(execute: {
        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
        alertWindow.rootViewController = UIViewController()
        alertWindow.windowLevel = UIWindowLevelAlert + 1

        let alert2 = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction2 = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert2.addAction(defaultAction2)

        alertWindow.makeKeyAndVisible()

        alertWindow.rootViewController?.present(alert2, animated: true, completion: nil)
    })
}

फंक्शन कॉलिंग

SharedClass.sharedInstance.alertWindow(title:"This your title", message:"This is your message")

विधि 4:

एक्सटेंशन के साथ चेतावनी

extension  UIViewController {

    func showAlert(withTitle title: String, withMessage message:String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let ok = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        let cancel = UIAlertAction(title: "Cancel", style: .default, handler: { action in
        })
        alert.addAction(ok)
        alert.addAction(cancel)
        DispatchQueue.main.async(execute: {
            self.present(alert, animated: true)
        })
    }
}

अब इस तरह से कॉल करें

//Call showAlert function in your class
@IBAction func onClickAlert(_ sender: UIButton) {
    showAlert(withTitle:"Your Title Here", withMessage: "YourCustomMessageHere")
}

विधि 5:

TEXTFIELDS के साथ ALERT

अगर आप textfields को अलर्ट में जोड़ना चाहते हैं।

//Global variables
var name:String?
var login:String?

//Call this function like this:  alertWithTF() 
//Add textfields to alert 
func alertWithTF() {

    let alert = UIAlertController(title: "Login", message: "Enter username&password", preferredStyle: .alert)
    // Login button
    let loginAction = UIAlertAction(title: "Login", style: .default, handler: { (action) -> Void in
        // Get TextFields text
        let usernameTxt = alert.textFields![0]
        let passwordTxt = alert.textFields![1]
        //Asign textfileds text to our global varibles
        self.name = usernameTxt.text
        self.login = passwordTxt.text

        print("USERNAME: \(self.name!)\nPASSWORD: \(self.login!)")
    })

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

    //1 textField for username
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Enter username"
        //If required mention keyboard type, delegates, text sixe and font etc...
        //EX:
        textField.keyboardType = .default
    }

    //2nd textField for password
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Enter password"
        textField.isSecureTextEntry = true
    }

    // Add actions
    alert.addAction(loginAction)
    alert.addAction(cancel)
    self.present(alert, animated: true, completion: nil)

}

विधि 6:

एक्सटेंशन के साथ शेयरडक्लास में अलर्ट

//This is your shared class
import UIKit

 class SharedClass: NSObject {

 static let sharedInstance = SharedClass()

 //Here write your code....

 private override init() {
 }
}

//Alert function in shared class
extension UIViewController {
    func showAlert(title: String, msg: String) {
        DispatchQueue.main.async {
            let alert = UIAlertController(title: title, message: msg, preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    }
}

अब सीधे इस तरह से कॉल करें

self.showAlert(title: "Your title here...", msg: "Your message here...")

विधि 7:

अलर्ट के लिए अलग वर्ग में एक्सटेंशन के साथ साझा वर्ग के साथ चेतावनी।

एक नई स्विफ्ट क्लास बनाएं, और import UIKit। कोड के नीचे कॉपी और पेस्ट करें।

//This is your Swift new class file
import UIKit
import Foundation

extension UIAlertController {
    class func alert(title:String, msg:String, target: UIViewController) {
        let alert = UIAlertController(title: title, message: msg, preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default) {
        (result: UIAlertAction) -> Void in
        })
        target.present(alert, animated: true, completion: nil)
    }
}

अब अपने सभी वर्गों (सिंगल लाइन) में इस तरह से अलर्ट फ़ंक्शन को कॉल करें।

UIAlertController.alert(title:"Title", msg:"Message", target: self)

यह कैसा है....


परफेक्ट! +1 क्या आप एकीकृत टाइमआउट के साथ एक विधि जोड़ सकते हैं? धन्यवाद!
पास्कल

@ पाससे, क्षमा करें, मैं समझ नहीं पाया, कृपया संक्षेप में बता सकते हैं।
iOS

मुझे एक अलर्टकंट्रोलर की आवश्यकता है जो 'ओके' बटन पर क्लिक करने या टाइमआउट होने तक प्रस्तुत किया जाता है। विधि 6 या 7 जैसा कुछ लेकिन एक अतिरिक्त इनपुट चर 'टाइमआउट' के साथ।
पास्कल

एक्सटेंशन UIViewController {func alertWithTime (शीर्षक: स्ट्रिंग, संदेश: स्ट्रिंग, टाइमइंटरवल: TimeInterval) {DispatchQueue.main.async {चेतावनी दें = UIAlertChroller (शीर्षक: शीर्षक, संदेश: संदेश, प्राथमिकता: अलर्ट)। : "ओके", शैली: .Dfault, हैंडलर: एनआईएल) स्व.प्रस्तुति (सतर्क, एनिमेटेड: सत्य, पूर्ण: एनआईएल) यदि # अनुपलब्ध (आईओएस 10.0, *) {टिमर.स्क्लेस्डटाइमर (टाइमेइंटरवाल के साथ: timeInterval, दोहराता है: गलत , ब्लॉक: {_ in alert.dismiss (एनिमेटेड: सच, पूरा: nil)})}} {// पिछले संस्करणों पर गिरावट}}}}}
iOS

1
यदि आप timeInterval 0 का उल्लेख करते हैं तो यदि आप अलर्ट को बंद नहीं करना चाहते हैं, तो स्थिति का उपयोग करें। if timeInterval != 0 { if #available(iOS 10.0, *) { Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: false, block: { _ in alert.dismiss(animated: true, completion: nil) }) } else { // Fallback on earlier versions } }
iOS

19

देखने के लिए क्लिक करें

@IBAction func testClick(sender: UIButton) {

  var uiAlert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
  self.presentViewController(uiAlert, animated: true, completion: nil)

  uiAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
   println("Click of default button")
  }))

  uiAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { action in
   println("Click of cancel button")
  }))

}

दो बटन ठीक है और रद्द करें के साथ किया


12

यदि आप iOS 7 और 8 को लक्षित कर रहे हैं , तो आपको यह सुनिश्चित करने के लिए कुछ इस तरह की आवश्यकता है कि आप प्रत्येक संस्करण के लिए सही विधि का उपयोग कर रहे हैं, क्योंकि UIAlertViewiOS 8 में पदावनत है, लेकिन UIAlertControlleriOS 7 में उपलब्ध नहीं है:

func alert(title: String, message: String) {
    if let getModernAlert: AnyClass = NSClassFromString("UIAlertController") { // iOS 8
        let myAlert: UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        myAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        self.presentViewController(myAlert, animated: true, completion: nil)
    } else { // iOS 7
        let alert: UIAlertView = UIAlertView()
        alert.delegate = self

        alert.title = title
        alert.message = message
        alert.addButtonWithTitle("OK")

        alert.show()
    }
}

या आप समय बचा सकते हैं और बस UIAlertViewतब तक उपयोग कर सकते हैं जब तक आप iOS 7 के लिए समर्थन छोड़ नहीं देते। Apple उस के लिए आपके ऐप को अस्वीकार नहीं करेगा।
cccrack

2
पदावनति का अर्थ यह नहीं है कि "इसका उपयोग न करें" या यह "गलत पद्धति" होगी, इसका मतलब यह है कि यह बाद में काम नहीं करेगा। विशेष रूप से iOS8 पर UIAlertController का उपयोग करने की कोई आवश्यकता नहीं है अगर किसी को बस बुनियादी अलर्ट की आवश्यकता होती है। वे पहले की तरह काम करेंगे। कई API हैं जो iOS4 या 5 में अपग्रेड किए गए हैं और अभी भी iOS8 में काम करते हैं। लेकिन निश्चित रूप से उच्चतर आईओएस स्तर को लक्षित करने वाले ऐप्स का उपयोग नहीं करना चाहिए और इसीलिए एक अपक्षय चेतावनी है।
सामी कुहोमेन

1
@SamiKuhmonen नहीं, लेकिन यह स्पष्ट करता है कि आप ऐसा क्यों कर रहे हैं जो आप कर रहे हैं और जब आपका न्यूनतम संस्करण ऐसा करने के लिए पर्याप्त रूप से उच्च है, तो पदावनत तरीकों के लिए समर्थन निकालना आसान हो जाता है।
एस्ट्रो बीबी

12

स्विफ्ट 2 के प्रोटोकॉल एक्सटेंशन के साथ, आप एक प्रोटोकॉल बना सकते हैं जो आपके व्यू कंट्रोलर्स को एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है:

ShowsAlert.swift

import UIKit

protocol ShowsAlert {}

extension ShowsAlert where Self: UIViewController {
    func showAlert(title: String = "Error", message: String) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
        presentViewController(alertController, animated: true, completion: nil)
    }
}

ViewController.swift

class ViewController: UIViewController, ShowsAlert {
    override func viewDidLoad() {
        super.viewDidLoad()
        showAlert(message: "Hey there, I am an error message!")
    }
}

1
अच्छी तरह से काम। Swift3 के लिए 'presentViewController' को 'present' में बदलें।
विंसेंट

11

UIAlertView को तेज भाषा में दिखाएं: -

प्रोटोकॉल UIAlertViewDelegate

let alert = UIAlertView(title: "alertView", message: "This is alertView", delegate:self, cancelButtonTitle:"Cancel", otherButtonTitles: "Done", "Delete")
alert.show()

UIAlertViewController को तेज भाषा में दिखाएं: -

let alert = UIAlertController(title: "Error", message: "Enter data in Text fields", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

11

बस कंस्ट्रक्टर में अन्य बॉटनटाइट्स प्रदान न करें।

let alertView = UIAlertView(title: "Oops!", message: "Something
happened...", delegate: nil, cancelButtonTitle: "OK")

alertView.show()

लेकिन मैं ऑस्कर से सहमत हूं, यह वर्ग iOS 8 में पदावनत है, इसलिए यदि आप iOS 8 केवल ऐप कर रहे हैं तो UIAlertView का कोई उपयोग नहीं होगा। अन्यथा ऊपर दिया गया कोड काम करेगा।


9

मैंने यह पाया,

var alertView = UIAlertView();
alertView.addButtonWithTitle("Ok");
alertView.title = "title";
alertView.message = "message";
alertView.show();

हालांकि अच्छा नहीं है, लेकिन यह काम करता है :)

अपडेट करें:

लेकिन मैंने हेडर फ़ाइल को इस प्रकार पाया है:

extension UIAlertView {
    convenience init(title: String, message: String, delegate: UIAlertViewDelegate?, cancelButtonTitle: String?, otherButtonTitles firstButtonTitle: String, _ moreButtonTitles: String...)
}

कोई इसे समझा सकता है।


स्पष्ट रूप से UIAlertView को iOS 8 में चित्रित किया गया है और अब हम UIAlertControllerStyleAlert की पसंदीदा शैली के साथ UIAlertController का उपयोग करते हैं।
ब्लूबियर

6
यदि आप एक ऐसा ऐप चलाते हैं जो iOS7.1 के लिए पीछे की ओर होना चाहिए और आप इसे स्विफ्ट में लिख रहे हैं, तो UIAlertController लक्ष्य डिवाइस को क्रैश कर देगा। IOS7 के लिए आपको विरासत UIAlertViews का समर्थन करने की आवश्यकता है।
जो

मुझे लगता है कि यह स्विफ्ट नहीं है जो दुर्घटना का कारण बनेगा, बल्कि यह तथ्य कि UIAlertController iOS 8 से पहले उपलब्ध नहीं है
Frédéric Adda

7

के लिए SWIFT4 , मुझे लगता है, का विस्तार UIViewControllerऔर एक पुन: प्रयोज्य पुष्टि नियंत्रण सबसे खूबसूरत तरीका पैदा कर रही है।

आप UIViewControllerनीचे दिए अनुसार विस्तार कर सकते हैं :

extension UIViewController {

func AskConfirmation (title:String, message:String, completion:@escaping (_ result:Bool) -> Void) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
    self.present(alert, animated: true, completion: nil)

    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { action in
        completion(true)
    }))

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { action in
        completion(false)
    }))
  }
}

तो आप इसे कभी भी उपयोग कर सकते हैं:

 AskConfirmation(title: "YOUR MESSAGE TITLE", message: "YOUR MESSAGE") { (result) in
        if result { //User has clicked on Ok

        } else { //User has clicked on Cancel

        }
    }

5
    class Preview: UIViewController , UIAlertViewDelegate
    {
        @IBAction func MoreBtnClicked(sender: AnyObject)
        {
            var moreAlert=UIAlertView(title: "Photo", message: "", delegate: self, cancelButtonTitle: "No Thanks!", otherButtonTitles: "Save Image", "Email", "Facebook", "Whatsapp" )
            moreAlert.show()
            moreAlert.tag=111;
        }

        func alertView(alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int)
        {
            if alertView.tag==111
            {
                if buttonIndex==0
                {
                    println("No Thanks!")
                }
                else if buttonIndex==1
                {
                    println("Save Image")
                }
                else if buttonIndex == 2
                {
                    println("Email")
                }
                else if buttonIndex == 3
                {
                    println("Facebook")
                }
                else if buttonIndex == 4
                {
                    println("Whatsapp")
                }
            }
        }
    }

सिर्फ कोड की एक गांठ लिखना बहुत उपयोगी नहीं है। किसी भी प्रश्न का उत्तर देते समय (विशेष रूप से एक स्वीकृत उत्तर सहित कई उत्तरों के साथ एक पुराना प्रश्न) कृपया एक कोड से अधिक लिखें। कृपया यह बताएं कि आपका कोड क्या करता है, यह सवाल का जवाब कैसे देता है और अन्य उत्तरों की तुलना में यह कैसे अलग (या बेहतर) है।
AdrianHHH

5

मेरी एक और चाल है। मान लीजिए कि आपके पास 5 कक्षाएं हैं जहां एक लॉगआउट अलर्ट लागू किया जाना है। स्विफ्ट क्लास एक्सटेंशन के साथ प्रयास करें।

फाइल- नई- स्विफ्ट क्लास- इसे नाम दें।

निम्नलिखित जोड़ें:

public extension UIViewController
{

    func makeLogOutAlert()
    {
        var refreshAlert = UIAlertController(title: "Log Out", message: "Are You Sure to Log Out ? ", preferredStyle: UIAlertControllerStyle.Alert)

        refreshAlert.addAction(UIAlertAction(title: "Confirm", style: .Default, handler: { (action: UIAlertAction!) in
            self.navigationController?.popToRootViewControllerAnimated(true)
        }))

        refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction!) in
            refreshAlert .dismissViewControllerAnimated(true, completion: nil)
        }))

        presentViewController(refreshAlert, animated: true, completion: nil)
    }
}

का उपयोग कर लागू करें: self.makeLogOutAlert ()। आशा है ये मदद करेगा।


5

मैंने आपके ऐप में कहीं से भी उपयोग करने के लिए एक एकल वर्ग बनाया है: https://github.com/Swinny1989/Swift-Popups

आप इस तरह कई बटन के साथ एक पॉपअप बना सकते हैं:

Popups.SharedInstance.ShowAlert(self, title: "Title goes here", message: "Messages goes here", buttons: ["button one" , "button two"]) { (buttonPressed) -> Void in
    if buttonPressed == "button one" { 
      //Code here
    } else if buttonPressed == "button two" {
        // Code here
    }
}

या इस तरह एक बटन के साथ पॉपअप:

Popups.SharedInstance.ShowPopup("Title goes here", message: "Message goes here.")

धन्यवाद। मैं वहां कुछ मुद्दे प्रस्तुत करता हूं
djdance

1
अरे @ Swinny89 हमारे साथ इस समाधान को साझा करने के लिए बहुत बहुत धन्यवाद! मैं बंद होने वाली चीज के साथ फंस गया और आपने मुझे बचा लिया!
ब्रूनो कैंपोस

5

स्विफ्ट 3

निम्नलिखित एक सरल उदाहरण है कि स्विफ्ट 3 के साथ एक बटन के साथ एक सरल अलर्ट कैसे बनाया जाए।

let alert = UIAlertController(title: "Title",
                              message: "Message",
                              preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default))
present(alert, animated: true)

उपरोक्त उदाहरण में कार्रवाई के हैंडल कॉलबैक को छोड़ दिया गया है क्योंकि बटन पर क्लिक करने पर एक बटन के साथ चेतावनी दृश्य का डिफ़ॉल्ट व्यवहार गायब हो जाता है।

यहां एक और कार्रवाई बनाने का तरीका बताया गया है, जिसे "अलर्ट.एडडक्शन (कार्रवाई)" के साथ अलर्ट में जोड़ा जा सकता है। विभिन्न शैलियों में .default, .destructive और .cancel हैं।

let action = UIAlertAction(title: "Ok", style: .default) { action in
    // Handle when button is clicked    
}

4

UIAlertViewत्रुटियों के बिना संकलन करने के लिए मुझे निम्नलिखित आरंभीकरण कोड मिला (मैं आखिरी बात करता हूं, अलग-अलग भाग शायद मुश्किल है)। लेकिन मुझे यह सुनिश्चित करना था कि selfमैं (जिसे मैं प्रतिनिधि के रूप में पास कर रहा हूँ) का वर्ग UIAlertViewDelegateकंपाइल त्रुटियों को दूर करने के लिए प्रोटोकॉल अपना रहा था :

let alertView = UIAlertView(
                  title: "My Title",
                  message: "My Message",
                  delegate: self,
                  cancelButtonTitle: "Cancel",
                  otherButtonTitles: "OK"
                )

वैसे, यह त्रुटि मुझे मिल रही थी (एक्सकोड 6.4 के रूप में):

टाइप 'UIAlertView' के लिए एक इनिशियलाइज़र नहीं खोज सकता है जो टाइप की एक तर्क सूची को स्वीकार करता है (शीर्षक: स्ट्रिंग, संदेश: स्ट्रिंग, डेलीगेट: MyViewController, CancelButtonTitle: स्ट्रिंग, अन्य मोबाइल बटन: स्ट्रिंग) '

जैसा कि दूसरों ने उल्लेख किया है, यदि आपको iOS 8.x + को लक्षित कर सकते हैं तो आपको UIAlertController की ओर पलायन करना चाहिए। IOS 7 का समर्थन करने के लिए, ऊपर दिए गए कोड का उपयोग करें (iOS 6 Swift द्वारा समर्थित नहीं है)।


4
 let alertController = UIAlertController(title: "Select Photo", message: "Select atleast one photo", preferredStyle: .alert)
    let action1 = UIAlertAction(title: "From Photo", style: .default) { (action) in
        print("Default is pressed.....")
    }
    let action2 = UIAlertAction(title: "Cancel", style: .cancel) { (action) in
        print("Cancel is pressed......")
    }
    let action3 = UIAlertAction(title: "Click new", style: .default) { (action) in
        print("Destructive is pressed....")

    }
    alertController.addAction(action1)
    alertController.addAction(action2)
    alertController.addAction(action3)
    self.present(alertController, animated: true, completion: nil)

}

4

आप इस सरल एक्सटेंशन का उपयोग n संख्या बटन और संबंधित क्रिया स्विफ्ट 4 और इसके बाद के संस्करण के साथ कर सकते हैं

extension UIViewController {
    func popupAlert(title: String?, message: String?, actionTitles:[String?], actions:[((UIAlertAction) -> Void)?]) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        for (index, title) in actionTitles.enumerated() {
            let action = UIAlertAction(title: title, style: .default, handler: actions[index])
            alert.addAction(action)
        }
        self.present(alert, animated: true, completion: nil)
    }
}

आप इसका उपयोग कर सकते हैं,

self.popupAlert(title: "Message", message: "your message", actionTitles: ["first","second","third"], actions:[
            {action1 in
                //action for first btn click
            },
            {action2 in
                //action for second btn click
            },
            {action3 in
                //action for third btn click
            }, nil]) 

कृपया डुप्लिकेट उत्तर पोस्ट न करें। यदि आप अपना उत्तर संपादित करना चाहते हैं।
IOS

बहुत बढ़िया जवाब। मुझे इसकी ही आवश्यकता थी। धन्यवाद!
ग्रेगरी विल्सन पुलिअट्टू

3

कारण यह काम नहीं करता है क्योंकि आपके द्वारा फ़ंक्शन के लिए दिए गए कुछ मान सही नहीं हैं। स्विफ्ट ऑब्जेक्टिव-सी को पसंद नहीं करता है, आप उन तर्कों के लिए शून्य डाल सकते हैं जो बिना किसी प्रतिबंध के वर्ग प्रकार हैं (हो सकता है)। तर्क otherButtonTield को गैर-वैकल्पिक के रूप में परिभाषित किया गया है, जिसका प्रकार इसके अंत में नहीं है (?)। इसलिए आपको इसके लिए एक ठोस मूल्य पास करना होगा।


3
@IBAction func Alert(sender: UIButton) {

    var alertView:UIAlertView = UIAlertView()
    alertView.title = "Alert!"
    alertView.message = "Message"
    alertView.delegate = self
    alertView.addButtonWithTitle("OK")

    alertView.show()

}

इसे इस्तेमाल करे


3

अलर्ट प्रदर्शित करने के लिए इस कोड का उपयोग करें

  let alertController = UIAlertController(title: "Hello  Coders", message: "your alert message", preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "Close Alert", style: .Default, handler: nil)
        alertController.addAction(defaultAction)

        presentViewController(alertController, animated: true, completion: nil)

संदर्भ: UIAlertController का उपयोग करके स्विफ्ट शो अलर्ट


3

xcode 9 में

let alert = UIAlertController(title: "Alert", message: "message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)

3

स्विफ्ट 4: केवल निम्नानुसार UIViewController के लिए एक एक्सटेंशन बनाएं:

extension  UIViewController {        
    func showSuccessAlert(withTitle title: String, andMessage message:String) {
        let alert = UIAlertController(title: title, message: message,
                                  preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "OK".localized, style:
        UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}

अब आपके ViewController में, सीधे फ़ंक्शन से ऊपर कॉल करें जैसे कि उन्हें UIViewController द्वारा प्रदान किया गया है।

    yourViewController.showSuccessAlert(withTitle: 
      "YourTitle", andMessage: "YourCustomTitle")

आम तौर पर, उत्तर बहुत अधिक सहायक होते हैं यदि वे एक स्पष्टीकरण शामिल करते हैं कि कोड क्या करने का इरादा है, और क्यों वह दूसरों को पेश किए बिना समस्या को हल करता है। उत्तर के संदर्भ मूल्य में सुधार करने और इसे अधिक समझने योग्य बनाने के लिए धन्यवाद!
टिम डाइकमैन

2

इसे इस्तेमाल करे। बटन में Bellow कोड डालें।

let alert = UIAlertController(title: "Your_Title_Text", message: "Your_MSG", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Your_Text", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated:true, completion: nil)

1

यहाँ स्विफ्ट में एक अजीब उदाहरण है:

private func presentRandomJoke() {
  if let randomJoke: String = jokesController.randomJoke() {
    let alertController: UIAlertController = UIAlertController(title:nil, message:randomJoke, preferredStyle: UIAlertControllerStyle.Alert)
    alertController.addAction(UIAlertAction(title:"Done", style:UIAlertActionStyle.Default, handler:nil))
    presentViewController(alertController, animated:true, completion:nil)
  }
}

1

यहाँ स्विफ्ट में AlertView का एक बहुत ही सरल कार्य है:

class func globalAlertYesNo(msg: String) {
        let alertView = UNAlertView(title: "Title", message: msg)

        alertView.messageAlignment = NSTextAlignment.Center
        alertView.buttonAlignment  = UNButtonAlignment.Horizontal

        alertView.addButton("Yes", action: {

            print("Yes action")

        })

        alertView.addButton("No", action: {

            print("No action")

        })

        alertView.show()

    }

आपको संदेश को स्ट्रिंग के रूप में पास करना होगा जहां आप इस फ़ंक्शन का उपयोग करते हैं।


1

पुराना तरीका: UIAlertView

let alertView = UIAlertView(title: "Default Style", message: "A standard alert.", delegate: self, cancelButtonTitle: "Cancel", otherButtonTitles: "OK")
alertView.alertViewStyle = .Default
alertView.show()

// MARK: UIAlertViewDelegate

 func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
 switch buttonIndex {

    // ...
   }
  }

नया तरीका: UIAlertController

let alertController = UIAlertController(title: "Default Style", message: "A standard alert.", preferredStyle: .Alert)

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
// ...
 }
 alertController.addAction(cancelAction)

 let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
// ...
 }
 alertController.addAction(OKAction)
 self.presentViewController(alertController, animated: true) {
 // ...
}

1

IOS 9 पर, आप यह कर सकते हैं

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)

1

// UIAlertView के लिए सामान्य वर्ग

//MARK:- MODULES
import Foundation
import UIKit

//MARK:- CLASS
class Alert  : NSObject{

static let shared = Alert()

var okAction : AlertSuccess?
typealias AlertSuccess = (()->())?
var alert: UIAlertController?

/** show */
public func show(title : String?, message : String?, viewController : UIViewController?, okAction : AlertSuccess = nil) {

    let version : NSString = UIDevice.current.systemVersion as NSString
    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: title, message: message, preferredStyle:.alert)
        alert?.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction) in

            if let okAction = okAction {
                okAction()
            }
        }))
        viewController?.present(alert ?? UIAlertController(), animated:true, completion:nil);
    }
}

/** showWithCancelAndOk */
public func showWithCancelAndOk(title : String, okTitle : String, cancelTitle : String, message : String, viewController : UIViewController?, okAction : AlertSuccess = nil, cancelAction : AlertSuccess = nil) {
    let version:NSString = UIDevice.current.systemVersion as NSString;

    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: title, message: message, preferredStyle:.alert)

        alert?.addAction(UIAlertAction(title: cancelTitle, style: .default, handler: { (action: UIAlertAction) in

            if let cancelAction = cancelAction {
                cancelAction()
            }
        }))
        alert?.addAction(UIAlertAction(title: okTitle, style: .default, handler: { (action: UIAlertAction) in

            if let okAction = okAction {
                okAction()
            }
        }))
        viewController?.present(alert!, animated:true, completion:nil);
    }
}

/** showWithTimer */
public func showWithTimer(message : String?, viewController : UIViewController?) {

    let version : NSString = UIDevice.current.systemVersion as NSString
    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: "", message: message, preferredStyle:.alert)
        viewController?.present(alert ?? UIAlertController(), animated:true, completion:nil)
        let when = DispatchTime.now() + 1
        DispatchQueue.main.asyncAfter(deadline: when){
            self.alert?.dismiss(animated: true, completion: nil)
        }
    }
}
}

उपयोग:-

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self) //without ok action

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self, okAction: {
                            //ok action
                        }) // with ok action

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self, okAction: {
                            //ok action 
}, cancelAction: {
 //cancel action
}) //with cancel and ok action

Alert.shared.showWithTimer(message : "This is an alert with timer", viewController : self) //with timer

1
  // UIAlertView is deprecated. Use UIAlertController 
  // title = title of the alert view.
  // message = Alert message you want to show.
  // By tap on "OK" , Alert view will dismiss.

 UIAlertView(title: "Alert", message: "Enter Message here.", delegate: nil, cancelButtonTitle: "OK").show()

क्या आप अपने द्वारा पोस्ट किए गए कोड में स्पष्टीकरण जोड़ सकते हैं? जैसा कि अभी है, आपका उत्तर वास्तव में एसओ नियमों द्वारा एक अच्छे उत्तर के रूप में योग्य नहीं है।
निको वैन बेले

चेतावनी दृश्य अब तेजी से बदल गया है। 4. सतर्क चेतावनी नियंत्रक
संदीप सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.