ตัวจัดการการเขียนสำหรับ UIAlertAction


105

ฉันกำลังนำเสนอ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)!)

บล็อก / การปิดทั้งหมดอยู่เหนือหัวของฉันในขณะนี้ ข้อเสนอแนะใด ๆ ที่ชื่นชมมาก

คำตอบ:


166

แทนที่จะใส่ตัวเองในตัวจัดการของคุณให้ใส่ (การแจ้งเตือน: UIAlertAction!) สิ่งนี้ควรทำให้รหัสของคุณมีลักษณะเช่นนี้

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

นี่เป็นวิธีที่เหมาะสมในการกำหนดตัวจัดการใน Swift

ดังที่ Brian ชี้ให้เห็นด้านล่างนอกจากนี้ยังมีวิธีที่ง่ายกว่าในการกำหนดตัวจัดการเหล่านี้ การใช้วิธีการของเขาจะกล่าวถึงในหนังสือให้ดูที่หัวข้อการปิด


9
{alert in println("Foo")}, {_ in println("Foo")}และ{println("Foo")}ยังต้องทำงาน
Brian Nickel

7
@BrianNickel: อันที่ 3 ไม่ทำงานเพราะคุณต้องจัดการกับการดำเนินการโต้แย้ง แต่นอกจากนั้นคุณไม่จำเป็นต้องเขียน UIAlertActionStyle.Default อย่างรวดเร็ว ค่าเริ่มต้นก็ใช้ได้เช่นกัน
เบ็น

โปรดทราบว่าหากคุณใช้ "let foo = UIAlertAction (... ) คุณสามารถใช้ไวยากรณ์การปิดท้ายเพื่อระบุสิ่งที่อาจจะปิดเป็นเวลานานหลังจาก UIAlertAction ซึ่งก็ดูดีเช่นนั้น
David H

1
นี่เป็นวิธีที่สวยงามในการเขียนสิ่งนี้:alert.addAction(UIAlertAction(title: "Okay", style: .default) { _ in println("Foo") })
Harris

74

ฟังก์ชั่นเป็นวัตถุชั้นหนึ่งใน Swift ดังนั้นหากคุณไม่ต้องการใช้การปิดคุณสามารถกำหนดฟังก์ชันด้วยลายเซ็นที่เหมาะสมจากนั้นจึงส่งผ่านเป็นhandlerอาร์กิวเมนต์ สังเกต:

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

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

ฟังก์ชันตัวจัดการนี้ควรมีลักษณะอย่างไรในวัตถุประสงค์ -C
andilabs

1
ฟังก์ชั่นที่มีการปิดในสวิฟท์ :) ซึ่งผมคิดว่าเป็นคนน่ารักเย็น ลองดูเอกสาร: developer.apple.com/library/ios/documentation/Swift/Conceptual/…
kakubei

17

คุณสามารถทำได้ง่ายๆโดยใช้ swift 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)

ใช้งานได้กับ swift 2 (Xcode เวอร์ชัน 7.0 เบต้า 3)


7

การเปลี่ยนแปลงไวยากรณ์ในรวดเร็ว 3.0

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

7

ใน Swift 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. ใน Swift

    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];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.