Thêm một UIAlertView đơn giản


108

Một số mã khởi động mà tôi có thể sử dụng để tạo một UIAlertView đơn giản với một nút "OK" trên đó là gì?


Bạn có muốn đợi để thực hiện một hành động cho đến khi nhấp vào nút OK không?
sudo rm -rf

1
@sudo rm -rf: Không, tôi chỉ cần nó nói "Dee dee doo doo" hoặc gì đó. Không cần hành động.
Linuxmint

Câu trả lời:


230

Khi bạn muốn cảnh báo hiển thị, hãy làm như sau:

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ROFL" 
                                                    message:@"Dee dee doo doo." 
                                                    delegate:self 
                                                    cancelButtonTitle:@"OK" 
                                                    otherButtonTitles:nil];
[alert show];

    // If you're not using ARC, you will need to release the alert view.
    // [alert release];

Nếu bạn muốn làm điều gì đó khi nút được nhấp, hãy triển khai phương pháp ủy quyền này:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // the user clicked OK
    if (buttonIndex == 0) {
        // do something here...
    }
}

Và đảm bảo rằng người được ủy quyền của bạn tuân thủ UIAlertViewDelegategiao thức:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 

4
bạn có thể sử dụng các thẻ nếu bạn có nhiều hơn 1 dạng xem cảnh báo để xác định ai đã gọi là người được ủy quyền.
Pnar Sbi Wer

71

Các câu trả lời khác đã cung cấp thông tin cho iOS 7 trở lên, tuy nhiên, UIAlertViewiOS 8 không được dùng nữa .

Trong iOS 8+ bạn nên sử dụng UIAlertController. Nó là một sự thay thế cho cả hai UIAlertViewUIActionSheet. Tài liệu: Tham chiếu lớp UIAlertController . Và một bài báo hay trên NSHipster .

Để tạo Chế độ xem cảnh báo đơn giản, bạn có thể làm như sau:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title"
                                                                         message:@"Message"
                                                                  preferredStyle:UIAlertControllerStyleAlert];
//We add buttons to the alert controller by creating UIAlertActions:
UIAlertAction *actionOk = [UIAlertAction actionWithTitle:@"Ok"
                                                   style:UIAlertActionStyleDefault
                                                 handler:nil]; //You can use a block here to handle a press on this button
[alertController addAction:actionOk];
[self presentViewController:alertController animated:YES completion:nil];

Swift 3/4/5:

let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
//We add buttons to the alert controller by creating UIAlertActions:
let actionOk = UIAlertAction(title: "OK",
    style: .default,
    handler: nil) //You can use a block here to handle a press on this button

alertController.addAction(actionOk)

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

Lưu ý rằng, vì nó đã được thêm vào iOS 8, mã này sẽ không hoạt động trên iOS 7 trở lên. Vì vậy, đáng buồn thay, bây giờ chúng ta phải sử dụng kiểm tra phiên bản như vậy:

NSString *alertTitle = @"Title";
NSString *alertMessage = @"Message";
NSString *alertOkButtonText = @"Ok";

if (@available(iOS 8, *)) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:alertTitle
                                                        message:alertMessage
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:alertOkButtonText, nil];
    [alertView show];
}
else {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:alertTitle
                                                                             message:alertMessage
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    //We add buttons to the alert controller by creating UIAlertActions:
    UIAlertAction *actionOk = [UIAlertAction actionWithTitle:alertOkButtonText
                                                       style:UIAlertActionStyleDefault
                                                     handler:nil]; //You can use a block here to handle a press on this button
    [alertController addAction:actionOk];
    [self presentViewController:alertController animated:YES completion:nil];
}

Swift 3/4/5:

let alertTitle = "Title"
let alertMessage = "Message"
let alertOkButtonText = "Ok"

if #available(iOS 8, *) {
    let alertController = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)
    //We add buttons to the alert controller by creating UIAlertActions:
    let actionOk = UIAlertAction(title: alertOkButtonText,
        style: .default,
        handler: nil) //You can use a block here to handle a press on this button

    alertController.addAction(actionOk)
    self.present(alertController, animated: true, completion: nil)
}
else {
    let alertView = UIAlertView(title: alertTitle, message: alertMessage, delegate: nil, cancelButtonTitle: nil, otherButtonTitles: alertOkButtonText)
    alertView.show()
}

UPD: được cập nhật cho Swift 5. Kiểm tra sự hiện diện của lớp lỗi thời được thay thế bằng kiểm tra tính khả dụng trong Obj-C.


1
Bạn không nên đăng mã có thể hoạt động nhưng không. Thay vì sử dụng MyOwnUtilsClass, chỉ cần viết mã kiểm tra phiên bản ios.
csharpwinphonexaml

1
@csharpwinphonexaml, tôi không đồng ý. Nó sẽ là một sự phức tạp không cần thiết của mã. Phiên bản hiện tại minh họa việc sử dụng UIAlerView / UIAlertController, trong khi kiểm tra phiên bản hệ thống không phải là chủ đề của câu hỏi này. Trong Swift, có một phương pháp tích hợp trong một dòng để kiểm tra phiên bản hệ điều hành, vì vậy tôi đã sử dụng nó. Objective-C có một số phương pháp, nhưng không có phương pháp nào là thanh lịch.
FreeNickname

1
Tôi nói điều đó bởi vì tôi biết không phải ai cũng thành thạo trong việc hiểu từng đoạn mã và biết cách thay thế nó bằng một đoạn mã đang hoạt động.
csharpwinphonexaml

10

UIAlertView không được dùng nữa trên iOS 8. Do đó, để tạo cảnh báo trên iOS 8 trở lên, bạn nên sử dụng UIAlertController:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Alert Message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){

    // Enter code here
}];
[alert addAction:defaultAction];

// Present action where needed
[self presentViewController:alert animated:YES completion:nil];

Đây là cách tôi đã thực hiện nó.


9
UIAlertView *alert = [[UIAlertView alloc]
 initWithTitle:@"Title" 
 message:@"Message" 
 delegate:nil //or self
 cancelButtonTitle:@"OK"
 otherButtonTitles:nil];

 [alert show];
 [alert autorelease];

9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];

9

Như một phần bổ sung cho hai câu trả lời trước đó (của người dùng "sudo rm -rf" và "Evan Mulawski"), nếu bạn không muốn làm bất cứ điều gì khi chế độ xem cảnh báo của mình được nhấp vào, bạn có thể phân bổ, hiển thị và giải phóng nó. Bạn không cần phải khai báo giao thức ủy quyền.


3

Đây là một phương pháp hoàn chỉnh chỉ có một nút, "ok", để đóng UIAlert:

- (void) myAlert: (NSString*)errorMessage
{
    UIAlertView *myAlert = [[UIAlertView alloc]
                          initWithTitle:errorMessage
                          message:@""
                          delegate:self
                          cancelButtonTitle:nil
                          otherButtonTitles:@"ok", nil];
    myAlert.cancelButtonIndex = -1;
    [myAlert setTag:1000];
    [myAlert show];
}


0

Cảnh báo đơn giản với dữ liệu mảng:

NSString *name = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"Name"];

NSString *msg = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"message"];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:name
                                                message:msg
                                               delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];

-1

Đối với Swift 3:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
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.