Chế độ xem cảnh báo nhanh với OK và Cancel: đã nhấn vào nút nào?


105

Tôi có một chế độ xem cảnh báo trong Xcode được viết bằng Swift và tôi muốn xác định xem người dùng đã chọn nút nào (đó là hộp thoại xác nhận) để không làm gì hoặc thực thi một cái gì đó.

Hiện tại tôi có:

@IBAction func pushedRefresh(sender: AnyObject) {
    var refreshAlert = UIAlertView()
    refreshAlert.title = "Refresh?"
    refreshAlert.message = "All data will be lost."
    refreshAlert.addButtonWithTitle("Cancel")
    refreshAlert.addButtonWithTitle("OK")
    refreshAlert.show()
}

Có lẽ tôi đang sử dụng các nút sai, vui lòng sửa cho tôi vì đây là tất cả mới đối với tôi.


Câu trả lời:


302

Nếu bạn đang sử dụng iOS8, bạn nên sử dụng UIAlertController - UIAlertView không được dùng nữa .

Đây là một ví dụ về cách sử dụng nó:

var refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in
  print("Handle Ok logic here")
  }))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in
  print("Handle Cancel Logic here")
  }))

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

Như bạn có thể thấy các trình xử lý khối cho UIAlertAction xử lý các lần nhấn nút. Đây là một hướng dẫn tuyệt vời (mặc dù hướng dẫn này không được viết bằng swift): http://hayageek.com/uialertcontroller-example-ios/

Bản cập nhật Swift 3:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
    print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
    print("Handle Cancel Logic here")
}))

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

Bản cập nhật Swift 5:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
      print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
      print("Handle Cancel Logic here")
}))

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

4
Bạn có thể tận dụng UIAlertActionStyle.Cancelthay vì .Defaulttrong ví dụ của mình.
Tristan Warner-Smith

Nếu tôi không muốn làm gì trong hành động Hủy, tôi không thể trả lại gì?
Gabriel Rodrigues

Tất nhiên, về mặt kỹ thuật, tôi không làm gì trong ví dụ ngoài việc ghi nhật ký. Nhưng nếu tôi xóa nhật ký, tôi sẽ không làm gì cả.
Michael Wildermuth

1
nó rất tuyệt vời khi câu trả lời được cập nhật cho các phiên bản mới hơn Swift
BlackTigerX

có ai biết làm thế nào để thêm id khả năng tiếp cận tới "ok" và "hủy" Hành động
Kamaldeep singh Bhatia

18
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)

4

Đã cập nhật cho swift 3:

// định nghĩa hàm:

@IBAction func showAlertDialog(_ sender: UIButton) {
        // Declare Alert
        let dialogMessage = UIAlertController(title: "Confirm", message: "Are you sure you want to Logout?", preferredStyle: .alert)

        // Create OK button with action handler
        let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
             print("Ok button click...")
             self.logoutFun()
        })

        // Create Cancel button with action handlder
        let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) -> Void in
            print("Cancel button click...")
        }

        //Add OK and Cancel button to dialog message
        dialogMessage.addAction(ok)
        dialogMessage.addAction(cancel)

        // Present dialog message to user
        self.present(dialogMessage, animated: true, completion: nil)
    }

// hàm logoutFun () definaiton:

func logoutFun()
{
    print("Logout Successfully...!")
}

3

Bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng UIAlertController

let alertController = UIAlertController(
       title: "Your title", message: "Your message", preferredStyle: .alert)
let defaultAction = UIAlertAction(
       title: "Close Alert", style: .default, handler: nil)
//you can add custom actions as well 
alertController.addAction(defaultAction)

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

.

Tham khảo: iOS Show Alert


0

Bạn có thể muốn xem xét sử dụng SCLAlertView , thay thế cho UIAlertView hoặc UIAlertController .

UIAlertController chỉ hoạt động trên iOS 8.x trở lên, SCLAlertView là một lựa chọn tốt để hỗ trợ phiên bản cũ hơn.

github để xem chi tiết

thí dụ:

let alertView = SCLAlertView()
alertView.addButton("First Button", target:self, selector:Selector("firstButton"))
alertView.addButton("Second Button") {
    print("Second button tapped")
}
alertView.showSuccess("Button View", subTitle: "This alert view has buttons")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.