11/08/2018, 22:08

Giới Thiệu UIAlertController

Trong IOS Trong iOS 8, bất cứ khi nào muốn hiển thị một thông điệp cảnh báo trong ứng dụng,chúng ta nên sử dụng UIAlertController thay vì hai lớp kia. Chọn một trong những cách hiển thị khi tạo Control cảnh báo. Không còn sử dụng đại biểu (ví dụ UIAlertViewDelegate) để xử lý delegate của người ...

Trong IOS

Trong iOS 8, bất cứ khi nào muốn hiển thị một thông điệp cảnh báo trong ứng dụng,chúng ta nên sử dụng UIAlertController thay vì hai lớp kia. Chọn một trong những cách hiển thị khi tạo Control cảnh báo. Không còn sử dụng đại biểu (ví dụ UIAlertViewDelegate) để xử lý delegate của người dùng. Khi sử dụng UIAlertController, chúng ta kết hợp hành động với control và hành động được thể hiện như là một block Objective-C hoặc closures Swift.

Trong techblog này, chúng ta hãy cùng tìm hiểu về UIAlertController và bao gồm làm thế nào để sử dụng control này để hiển thị một thông điệp cảnh báo. Nhân cơ hội này chúng ta cũng sẽ tìm hiểu qua về Closures and Enumeration trong Swift.

Tạo 1 project mới trong Xcode

Kéo 1 button vào view và đặt tiêu đề là “Hello Alert”, rất là đơn giản , nhưng như vậy là đủ

Thêm action vào viewcontroller Chúng ta hãy kéo button vào viewcontroller , nhớ đặt là action ,

@IBAction func showAlert() {

}

Như chúng ta đã biết ,outlets và actions cho phép chúng ta kết nối đến source code với đối tượng UI trong Storyboard Tiếp theo , chúng ta hãy kết nối button với action đó , giữ phím control key và kéo từ button "Hello Alert" vào View Controller , và thả .

UIAlertController - Connect Action Methods

Sử dụng UIAlertViewController để hiển thị cảnh báo Vậy là phần giao diện đã xong , tiếp theo chúng ta sẽ đến với phần code Bạn hãy thêm dòng code này vào trong hàm showAlert và tôi sẽ giải thích

@IBAction func showAlert() { let alertController = UIAlertController(title: "Xin chào bạn", message: "Đây là AlertView nhé ", preferredStyle: .Alert)

let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil) alertController.addAction(defaultAction)

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

Nhìn code , bạn sẽ thấy rất đơn giản , đây chính là Alert Controller để gửi tin nhắn , Bạn cần làm là xác định kiểu cần dùng hiện tại của bạn khi tạo ra một bộ Control cảnh báo. Nếu .Alert được chỉ định, một thông điệp cảnh báo sẽ được trình bày, trong khi một ActionSheet sẽ được hiển thị nếu bạn dùng trong .ActionSheet cho tham số preferredStyle.

Theo mặc định, Control cảnh báo không liên kết với bất kỳ hành động. Nếu bạn không thêm bất kỳ hành động, người dùng không có cách nào để bỏ qua cảnh báo. Trong đoạn mã trên, chúng ta tạo ra một UIAlertAction và kết hợp nó với bộ Control cảnh báo bằng cách gọi phương addAction. Khi khởi tạo một UIAlertAction, bạn đặt tiêu đề, kiểu nào và xử lý. Việc xử lý code sẽ được thực hiện khi button tap . Trong ví dụ này, chúng ta chỉ cần thiết lập xử lý dismiss để bỏ qua control.

Cuối cùng, chúng ta hiển thị Control cảnh báo bằng cách gọi presentViewController. Nếu chạy ứng dụng demo của bạn, bạn sẽ nhận được một thông điệp cảnh báo (tùy thuộc vào mình chọn phía trên) khi nhấn vào button.

uialertcontroller: tờ hành động và phong cách cảnh báo

Néu đây là lần đầu bạn code Swift, bạn sẽ thấy 1 điều đặc biệt so với Object c là sử dụng dấu "." (.Alert và .ActionSheet) tất nhiên , chúng ta cũng có thể viết hàm khởi tạo như bình thường như

lertController = UIAlertController(title: "Hey AppCoda", message: "What do you want to do?", preferredStyle: UIAlertControllerStyle.Alert)

Thực ra thì 2 cách viết này đều như nhau , và chúng ta chỉ rõ UIAlertControllerStyle là một Enumeration.

enum UIAlertControllerStyle : Int { case ActionSheet case Alert }

Một enumeration trong Swift cho phép chúng ta nhóm những giá trị cùng kiểu , Các giá trị này được định nghĩa trong enumeration (như là AlertSheet và Alert) là các biến của enumeration. Tuy nhiên , không giống như Objective C, Các biến này không được gán giá trị khi khởi tạo , Trong ví dụ UIAlertControllerStyle, ActionSheet và Alert không được gán như 0 và 1 , Với dòng code

let alertController = UIAlertController(title: "Hey AppCoda", message: "What do you want to do?", preferredStyle: .Alert)

Điều này viết ngắn hơn với "." và cho chúng ta dễ đọc code hơn Có thể phần này , trong lần sau viết techblog , mình sẽ viết chi tiết hơn , và chúng ta cùng thảo luận , Quay trở lại UIAlertController, một thứ chúng ta chưa thảo luận, khi chúng ta tạo 1 đối tượng UIAlertAction, chúng ta có thể chỉ rõ 1 block của code như một xử lý (Bạn có thể đọc block trõ hơn , trong các techblog của Framgia), Block của code sẽ thực hiện , khi người dùng lựa chọn hành động , chúng ta hãy thêm 1 hành động tới Alert Controller với code sau :

let callActionHandler = { (action:UIAlertAction!) -> Void in let alertMessage = UIAlertController(title: "Service Unavailable", message: "Sorry, the call feature is not available yet. Please retry later.", preferredStyle: .Alert) alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) self.presentViewController(alertMessage, animated: true, completion: nil) } let callAction = UIAlertAction(title: "Call", style: .Default, handler: callActionHandler) alertController.addAction(callAction)

Vậy là chúng ta đã thêm 1 hành động , thực hiện ở trọng block , và Block này đơn giản là 1 cái Alert cảnh báo người dùng về một tính năng chưa được thực hiện , trong Swift , Block này được biết như một Closure, và Closure là một đoạn mã , được thực hiện ngay trong hàm của bạn , và Block code này chỉ rõ định nghĩ của tham số Closure và trả về ,một loại đã được định nghĩa , và phần bên trong closure sẽ bắt đầu

let callAction = UIAlertAction(title: "Call", style: .Default, handler: { action in let alertMessage = UIAlertController(title: "Service Unavailable", message: "Sorry, the call feature is not available yet. Please retry later.", preferredStyle: .Alert) alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) self.presentViewController(alertMessage, animated: true, completion: nil) } ) alertController.addAction(callAction)

0