Cách triển khai hộp thoại bật lên trong iOS


303

Sau khi tính toán, tôi muốn hiển thị hộp bật lên hoặc hộp cảnh báo truyền thông điệp đến người dùng. Có ai biết nơi tôi có thể tìm thêm thông tin về điều này?

Câu trả lời:


517

Yup, UIAlertViewcó lẽ là những gì bạn đang tìm kiếm. Đây là một ví dụ:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

Nếu bạn muốn làm một cái gì đó lạ mắt hơn, giả sử hiển thị một UI tùy chỉnh trong bạn UIAlertView, bạn có thể phân lớp UIAlertViewvà đặt các thành phần UI tùy chỉnh trong initphương thức. Nếu bạn muốn trả lời nhấn nút sau khi UIAlertViewxuất hiện, bạn có thể đặt delegateở trên và thực hiện - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexphương thức.

Bạn cũng có thể muốn nhìn vào UIActionSheet.


45
Tài liệu của Apple cho biết "Lớp UIAlertView được dự định sẽ được sử dụng nguyên trạng và không hỗ trợ phân lớp". developer.apple.com/l
Library / ios /

40
Chỉ cần một nhận xét: với ARC được bật, '[phát hành cảnh báo]' là không cần thiết (ít nhất, trình biên dịch nói như vậy).
Javier Sedano

4
Phân lớp UIAlertView không được hỗ trợ iOS 4 trở đi
xySVerma

1
Dưới đây là một ví dụ về một UIAlertView đơn giản với đại biểu, nếu bạn cũng cần các hành động nút
guilherme.minglini

2
Trong trường hợp bạn đang tìm kiếm một phiên bản nhanh chóng, hãy xem câu trả lời của Oscar Swanros
Rogerio Chaves

177

Những người khác nhau đến câu hỏi này có nghĩa là những điều khác nhau bởi một hộp bật lên. Tôi rất khuyên bạn nên đọc tài liệu Chế độ xem tạm thời . Câu trả lời của tôi chủ yếu là một bản tóm tắt về điều này và các tài liệu liên quan khác.

Thông báo (cho tôi xem một ví dụ)

nhập mô tả hình ảnh ở đây

Cảnh báo hiển thị một tiêu đề và một thông báo tùy chọn. Người dùng phải xác nhận nó (cảnh báo một nút) hoặc đưa ra lựa chọn đơn giản (cảnh báo hai nút) trước khi tiếp tục. Bạn tạo một cảnh báo với a UIAlertController.

Rất đáng để trích dẫn cảnh báo và lời khuyên của tài liệu về việc tạo các cảnh báo không cần thiết.

nhập mô tả hình ảnh ở đây

Ghi chú:

Bảng hành động (cho tôi xem một ví dụ)

nhập mô tả hình ảnh ở đây

Bảng hành động cung cấp cho người dùng một danh sách các lựa chọn. Chúng xuất hiện ở dưới cùng của màn hình hoặc trong một cửa sổ bật lên tùy thuộc vào kích thước và hướng của thiết bị. Như với cảnh báo, a UIAlertControllerđược sử dụng để tạo một bảng hành động. Trước iOS 8, UIActionSheetđã được sử dụng, nhưng bây giờ tài liệu nói:

Quan trọng: UIActionSheet bị phản đối trong iOS 8. (Lưu ý rằng UIActionSheetDelegatecũng bị phản đối). Để tạo và quản lý tờ hành động trong iOS 8 và sau đó, thay vì sử dụng UIAlertControllervới một preferredStylesố UIAlertControllerStyleActionSheet.

Chế độ xem (cho tôi xem một ví dụ)

nhập mô tả hình ảnh ở đây

Một khung nhìn phương thức là một khung nhìn khép kín có mọi thứ nó cần để hoàn thành một nhiệm vụ. Nó có thể hoặc không thể chiếm toàn màn hình. Để tạo chế độ xem theo chế độ, hãy sử dụng một UIPresentationControllervới một trong các Kiểu trình bày phương thức .

Xem thêm

Popover (cho tôi xem một ví dụ)

nhập mô tả hình ảnh ở đây

Một Popover là một cái nhìn xuất hiện khi một vòi sử dụng trên một cái gì đó và biến mất khi khai thác ra khỏi nó. Nó có một mũi tên hiển thị điều khiển hoặc vị trí từ nơi vòi được thực hiện. Nội dung có thể là bất cứ thứ gì bạn có thể đặt trong Trình điều khiển xem. Bạn làm một popover với a UIPopoverPresentationController. (Trước iOS 8, UIPopoverControllerlà phương pháp được đề xuất.)

Trước đây, popovers chỉ có sẵn trên iPad, nhưng bắt đầu với iOS 8, bạn cũng có thể tải chúng trên iPhone (xem tại đây , tại đâytại đây ).

Xem thêm

Thông báo

nhập mô tả hình ảnh ở đây

Thông báo là âm thanh / rung, cảnh báo / biểu ngữ hoặc huy hiệu thông báo cho người dùng về thứ gì đó ngay cả khi ứng dụng không chạy ở nền trước.

nhập mô tả hình ảnh ở đây

Xem thêm

Một lưu ý về Android Toasts

nhập mô tả hình ảnh ở đây

Trong Android, Toast là một thông báo ngắn hiển thị trên màn hình trong một khoảng thời gian ngắn và sau đó tự động biến mất mà không làm gián đoạn tương tác của người dùng với ứng dụng.

Những người đến từ nền tảng Android muốn biết Toast phiên bản iOS là gì. Một số ví dụ về những câu hỏi này anh ta có thể tìm thấy ở đây , đây , đâyđây . Câu trả lời là không có Toast tương đương với iOS . Các cách giải quyết khác nhau đã được trình bày bao gồm:

  • Làm cho riêng bạn với một lớp con UIView
  • Nhập dự án của bên thứ ba bắt chước Toast
  • Sử dụng Thông báo không có nút với bộ hẹn giờ

Tuy nhiên, lời khuyên của tôi là hãy gắn bó với các tùy chọn UI tiêu chuẩn đã có trong iOS. Đừng cố làm cho ứng dụng của bạn trông và hoạt động giống hệt như phiên bản Android. Hãy suy nghĩ về cách đóng gói lại để nó trông giống như một ứng dụng iOS.


3
Với một lưu ý về Android Toast vẫn còn! Đẹp! Thông tin này giúp các nhà phát triển mới xuất phát từ Android. Cảm ơn bạn!
Filipe Brito

3
Man, tôi cần in và đóng khung này! Bạn đã cứu tôi ngày hôm qua và hôm nay một lần nữa: D
finngu

58

Kể từ khi phát hành iOS 8, UIAlertViewhiện không còn sử dụng nữa; UIAlertControll là sự thay thế.

Đây là một ví dụ về giao diện của nó trong Swift:

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

Như bạn có thể thấy, API cho phép chúng tôi thực hiện các cuộc gọi lại cho cả hành động và khi chúng tôi trình bày cảnh báo, điều này khá tiện dụng!

Đã cập nhật cho Swift 4.2

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi Có nên trình bàyViewControll có một dấu ngoặc đóng và sự khác biệt giữa khối hoàn thành của bạn và chỉ cần hoàn thành: không?
Andrew Plummer

Nó không có sự khác biệt. Nó tồn tại một khối để gọi nó sẽ được gọi.
Entalpi

25

Đã cập nhật cho iOS 8.0

Kể từ iOS 8.0, bạn sẽ cần sử dụng UIAlertControll như sau:

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

Trong đó bản thân trong ví dụ của tôi là một UIViewControll, thực hiện phương thức "PresentViewControll" cho một cửa sổ bật lên.

David


11

Dành cho Swift 3 & Swift 4:

Vì UIAlertView không được dùng nữa, nên có cách tốt để hiển thị Thông báo trên Swift 3

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

Không dùng nữa

Đây là phiên bản nhanh chóng lấy cảm hứng từ phản hồi đã kiểm tra:

Hiển thị cảnh báo:

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

Thêm đại biểu vào trình điều khiển xem của bạn:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Khi người dùng nhấp vào nút, mã này sẽ được thực thi:

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView hiện không được chấp nhận.
Parth Sane

7

Mặc dù tôi đã viết tổng quan về các loại cửa sổ bật lên khác nhau, hầu hết mọi người chỉ cần một Thông báo.

Cách triển khai hộp thoại bật lên

nhập mô tả hình ảnh ở đây

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

Câu trả lời đầy đủ hơn của tôi là ở đây .


0

Đây là phiên bản C # trong Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
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.