Menambahkan UIAlertView sederhana

108

Apa beberapa kode awal yang dapat saya gunakan untuk membuat UIAlertView sederhana dengan satu tombol "OK" di atasnya?

Linuxmint
sumber
Apakah Anda ingin menunggu untuk melakukan tindakan hingga tombol OK diklik?
sudo rm -rf
1
@sudo rm -rf: Tidak, saya hanya perlu mengatakan "Dee dee doo doo" atau semacamnya. Tidak perlu tindakan apa pun.
Linuxmint

Jawaban:

230

Saat Anda ingin lansiran ditampilkan, lakukan ini:

    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];

Jika Anda ingin melakukan sesuatu saat tombol diklik, terapkan metode delegasi ini:

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

Dan pastikan delegasi Anda mematuhi UIAlertViewDelegateprotokol:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 
sudo rm -rf
sumber
4
Anda dapat menggunakan tag jika Anda memiliki lebih dari 1 tampilan peringatan untuk menentukan siapa yang memanggil delegasi.
Pnar Sbi Wer
71

Jawaban lain sudah memberikan informasi untuk iOS 7 dan yang lebih lama, namun UIAlertViewtidak digunakan lagi di iOS 8 .

Di iOS 8+, Anda harus menggunakan UIAlertController. Ini adalah pengganti untuk UIAlertViewdan UIActionSheet. Dokumentasi: Referensi Kelas UIAlertController . Dan artikel bagus di NSHipster .

Untuk membuat Tampilan Peringatan sederhana, Anda dapat melakukan hal berikut:

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];

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

Perhatikan, bahwa, karena ditambahkan di iOS 8, kode ini tidak akan berfungsi di iOS 7 dan yang lebih lama. Jadi, sayangnya, untuk saat ini kita harus menggunakan pemeriksaan versi seperti:

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];
}

Cepat 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: diperbarui untuk Swift 5. Mengganti pemeriksaan kehadiran kelas yang sudah ketinggalan zaman dengan pemeriksaan ketersediaan di Obj-C.

FreeNickname
sumber
1
Anda tidak boleh memposting kode yang bisa berfungsi tetapi tidak. Alih-alih menggunakan MyOwnUtilsClass, cukup tulis kode yang memeriksa versi ios.
csharpwinphonexaml
1
@csharpwinphonexaml, saya tidak setuju. Ini akan menjadi komplikasi kode yang tidak perlu. Versi saat ini mengilustrasikan penggunaan UIAlerView / UIAlertController, sedangkan pemeriksaan versi sistem bukan topik pertanyaan ini. Di Swift ada metode satu baris bawaan untuk memeriksa versi OS, jadi saya menggunakannya. Objective-C memiliki beberapa metode, tetapi tidak ada yang elegan.
FreeNickname
1
Saya mengatakannya karena saya tahu tidak semua orang ahli dalam memahami setiap bagian kode dan mengetahui cara menggantinya dengan yang berfungsi.
csharpwinphonexaml
10

UIAlertView tidak digunakan lagi di iOS 8. Oleh karena itu, untuk membuat peringatan di iOS 8 dan yang lebih baru, disarankan untuk menggunakan 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];

Beginilah cara saya menerapkannya.

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

 [alert show];
 [alert autorelease];
Evan Mulawski
sumber
9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];
Brynner Ferreira
sumber
9

Sebagai tambahan untuk dua jawaban sebelumnya (dari pengguna "sudo rm -rf" dan "Evan Mulawski"), jika Anda tidak ingin melakukan apa pun saat tampilan peringatan diklik, Anda dapat mengalokasikan, menampilkan, dan melepaskannya. Anda tidak perlu mendeklarasikan protokol delegasi.

Di Wu
sumber
3

Berikut adalah metode lengkap yang hanya memiliki satu tombol, 'ok', untuk menutup 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];
}
MGM
sumber
1

Halaman ini menunjukkan cara menambahkan UIAlertController jika Anda menggunakan Swift.

air mawar
sumber
0

Peringatan sederhana dengan data array:

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];
Bhupendrasingh Lohar
sumber
-1

Untuk 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)
Nyakiba
sumber