2014-11-28 14 views
6

Ứng dụng của tôi có một số UILongPressGestureRecognizer, hiển thị cảnh báo với UIAlertController khi người dùng chạm vào hai thành phần trên màn hình. Hiện tại, người dùng phải nhấn nút OK để loại bỏ cảnh báo, tuy nhiên tôi muốn loại bỏ cảnh báo sau 0,5 giây tự động, vì vậy người dùng không thỏa hiệp tương tác của anh ấy với ứng dụng.Loại bỏ UIAlertController tự động

Có cách nào để làm điều đó không?

Trả lời

7

Bạn có thể đạt được tự động loại bỏ chế độ xem cảnh báo bằng cách sử dụng dispatch_after của GCD.

Hãy thử bên dưới mã:

let delay = 0.5 * Double(NSEC_PER_SEC) 
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
    dispatch_after(time, dispatch_get_main_queue()) {() -> Void in 
     self.dismissPopover() 
    } 

Ở đây, dismissCategoryPopover() là một phương pháp tùy chỉnh mà sẽ được gọi tự động sau 0,5 giây để bỏ qua những cái nhìn tỉnh táo.

+0

Thenk youu rất nhiều @Abhishek, tôi đã sử dụng mã của bạn, nhưng insted của một phương pháp như dismissPopover() tôi đã sử dụng (cảnh báo là UIALertController của tôi): alert.dismissViewControllerAnimated (true, hoàn thành : nil) –

+0

Abhishek, Vì tôi đang sử dụng Int64 và NSEC_PER_SEC, tôi thấy vấn đề này khi biên dịch cho iPhone {4s, 5}: "tệp được xây dựng cho x86_64 không phải là kiến ​​trúc được liên kết (i386)", tuy nhiên ứng dụng là đang chạy trong Trình mô phỏng iPhone 4S, 5} của iPhone, có khả năng ứng dụng của tôi có thể bị Apple từ chối vì lỗi này không? Cảm ơn! –

+0

Điều gì xảy ra nếu có nút ok trên cảnh báo và người dùng nhấp vào nút đó trước khi công văn được thực thi? –

3

Tôi có chức năng tùy chỉnh được cập nhật cho Swift 2.1 sử dụng UIAlertController để mô phỏng chức năng Toast trong Android.

func showToast(withMessage message:String) { 
    let menu = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) 
    let cancel = UIAlertAction(title: message, style: .Cancel, handler: nil) 
    menu.addAction(cancel) 
    self.presentViewController(menu, animated: true, completion: nil) 
    let delay = 1.5 * Double(NSEC_PER_SEC) 
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
    self.tableView.setEditing(false, animated: true) 
    dispatch_after(time, dispatch_get_main_queue()) {() -> Void in 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Điều này cho thấy một giải pháp làm việc hoàn chỉnh cho OP.

0

Swift 3:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 
    alert.dismiss(animated: false, completion: nil) 
} 
Các vấn đề liên quan