UIAlertAction के लिए लेखन हैंडलर


104

मैं UIAlertViewउपयोगकर्ता के लिए प्रस्तुत कर रहा हूं और मैं यह नहीं समझ सकता कि हैंडलर कैसे लिखूं। यह मेरा प्रयास है:

let alert = UIAlertController(title: "Title",
                            message: "Message",
                     preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "Okay",
                              style: UIAlertActionStyle.Default,
                            handler: {self in println("Foo")})

मुझे Xcode में मुद्दों का एक गुच्छा मिलता है।

दस्तावेज कहता है convenience init(title title: String!, style style: UIAlertActionStyle, handler handler: ((UIAlertAction!) -> Void)!)

पूरे ब्लॉक / क्लोजर इस समय मेरे सिर पर थोड़ा है। किसी भी सुझाव की बहुत सराहना की है।

जवाबों:


165

अपने हैंडलर में स्व के बजाय, डाल (अलर्ट: यूआईएलर्टएशन!)। यह आपके कोड को इस तरह बनाना चाहिए

    alert.addAction(UIAlertAction(title: "Okay",
                          style: UIAlertActionStyle.Default,
                        handler: {(alert: UIAlertAction!) in println("Foo")}))

स्विफ्ट में हैंडलर को परिभाषित करने का यह उचित तरीका है।

जैसा कि ब्रायन ने नीचे बताया है, इन हैंडलर को परिभाषित करने के आसान तरीके भी हैं। उनके तरीकों का उपयोग करते हुए पुस्तक में चर्चा की गई है, क्लोजर शीर्षक वाले अनुभाग को देखें


9
{alert in println("Foo")}, {_ in println("Foo")}और {println("Foo")}भी काम करना चाहिए।
ब्रायन निकल

7
@BrianNickel: 3 एक काम नहीं करता है क्योंकि आपको तर्क कार्रवाई को संभालने की आवश्यकता है। लेकिन इसके अलावा आपको UIAlertActionStyle.Default को स्विफ्ट में लिखना नहीं होगा। काम करता है।
बेन

ध्यान दें कि यदि आप "let foo = UIAlertAction (...) का उपयोग करते हैं, तो आप UIAlertAction के बाद एक लंबी क्लोजर क्या हो सकती है, इसे लगाने के लिए ट्रेलिंग क्लोजर सिंटैक्स का उपयोग कर सकते हैं - यह उस तरह से बहुत अच्छा लगता है
डेविड एच

1
यहाँ यह लिखने का एक सुंदर तरीका है:alert.addAction(UIAlertAction(title: "Okay", style: .default) { _ in println("Foo") })
हैरिस

74

स्विफ्ट में फ़ंक्शंस प्रथम श्रेणी के ऑब्जेक्ट हैं। इसलिए यदि आप किसी क्लोजर का उपयोग नहीं करना चाहते हैं, तो आप केवल एक फ़ंक्शन को उचित हस्ताक्षर के साथ परिभाषित कर सकते हैं और फिर इसे handlerतर्क के रूप में पास कर सकते हैं । का निरीक्षण करें:

func someHandler(alert: UIAlertAction!) {
    // Do something...
}

alert.addAction(UIAlertAction(title: "Okay",
                              style: UIAlertActionStyle.Default,
                              handler: someHandler))

ऑब्जेक्टिव-सी में इस हैंडलर फंक्शन को कैसे देखना चाहिए?
andilabs

1
फ़ंक्शंस स्विफ्ट में बंद हैं :) जो मैं हालांकि बहुत अच्छा था। डॉक्स की जाँच करें: developer.apple.com/library/ios/documentation/Swift/Conceptual/…
kakubei

17

आप इसे स्विफ्ट 2 का उपयोग करते हुए सरल रूप में कर सकते हैं:

let alertController = UIAlertController(title: "iOScreator", message:
        "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
        self.pressed()
}))

func pressed()
{
    print("you pressed")
}

    **or**


let alertController = UIAlertController(title: "iOScreator", message:
        "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
      print("pressed")
 }))

उपरोक्त सभी उत्तर सही हैं मैं सिर्फ एक और तरीका दिखा रहा हूं जो किया जा सकता है।


11

मान लें कि आप मुख्य शीर्षक, दो कार्यों (सहेजें और त्यागें) और रद्द करें बटन के साथ एक UIAlertAction चाहते हैं:

let actionSheetController = UIAlertController (title: "My Action Title", message: "", preferredStyle: UIAlertControllerStyle.ActionSheet)

    //Add Cancel-Action
    actionSheetController.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))

    //Add Save-Action
    actionSheetController.addAction(UIAlertAction(title: "Save", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
        print("handle Save action...")
    }))

    //Add Discard-Action
    actionSheetController.addAction(UIAlertAction(title: "Discard", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
        print("handle Discard action ...")
    }))

    //present actionSheetController
    presentViewController(actionSheetController, animated: true, completion: nil)

यह स्विफ्ट 2 (Xcode संस्करण 7.0 बीटा 3) के लिए काम करता है


7

स्विफ्ट 3.0 में सिंटैक्स परिवर्तन

alert.addAction(UIAlertAction(title: "Okay",
                style: .default,
                handler: { _ in print("Foo") } ))

7

स्विफ्ट 4 में:

let alert=UIAlertController(title:"someAlert", message: "someMessage", preferredStyle:UIAlertControllerStyle.alert )

alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.default, handler: {
        _ in print("FOO ")
}))

present(alert, animated: true, completion: nil)

4

यह है कि मैं इसे xcode 7.3.1 के साथ कैसे करता हूं

// create function
func sayhi(){
  print("hello")
}

// बटन बनाएं

let sayinghi = UIAlertAction(title: "More", style: UIAlertActionStyle.Default, handler:  { action in
            self.sayhi()})

// अलर्ट कंट्रोल में बटन जोड़ना

myAlert.addAction(sayhi);

// पूरा कोड, यह कोड 2 बटन जोड़ देगा

  @IBAction func sayhi(sender: AnyObject) {
        let myAlert = UIAlertController(title: "Alert", message:"sup", preferredStyle: UIAlertControllerStyle.Alert);
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:nil)

        let sayhi = UIAlertAction(title: "say hi", style: UIAlertActionStyle.Default, handler:  { action in
            self.sayhi()})

        // this action can add to more button
        myAlert.addAction(okAction);
        myAlert.addAction(sayhi);

        self.presentViewController(myAlert, animated: true, completion: nil)
    }

    func sayhi(){
        // move to tabbarcontroller
     print("hello")
    }

4

अलर्ट बनाएं, xcode 9 में परीक्षण किया गया

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

और समारोह

func finishAlert(alert: UIAlertAction!)
{
}

2
  1. स्विफ्ट में

    let alertController = UIAlertController(title:"Title", message: "Message", preferredStyle:.alert)
    
    let Action = UIAlertAction.init(title: "Ok", style: .default) { (UIAlertAction) in
        // Write Your code Here
    }
    
    alertController.addAction(Action)
    self.present(alertController, animated: true, completion: nil)
  2. ऑब्जेक्टिव सी में

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *OK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
    {
    }];
    
    [alertController addAction:OK];
    
    [self presentViewController:alertController animated:YES completion:nil];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.