การเพิ่ม UIAlertView แบบธรรมดา


108

รหัสเริ่มต้นอะไรที่ฉันสามารถใช้เพื่อสร้าง UIAlertView แบบง่ายๆโดยมีปุ่ม "ตกลง" เพียงปุ่มเดียว


คุณต้องการรอเพื่อดำเนินการจนกว่าจะคลิกปุ่ม OK หรือไม่?
sudo rm -rf

1
@sudo rm -rf: ไม่ฉันแค่ต้องการให้มันพูดว่า "ดีดีดูโด" หรืออะไรสักอย่าง ไม่จำเป็นต้องดำเนินการใด ๆ
Linuxmint

คำตอบ:


230

เมื่อคุณต้องการให้การแจ้งเตือนแสดงให้ดำเนินการดังนี้:

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

หากคุณต้องการทำบางสิ่งเมื่อคลิกปุ่มให้ใช้วิธีการมอบสิทธิ์นี้:

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

และตรวจสอบให้แน่ใจว่าผู้รับมอบสิทธิ์ของคุณเป็นไปตามUIAlertViewDelegateโปรโตคอล:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 

4
คุณสามารถใช้แท็กได้หากคุณมีมุมมองการแจ้งเตือนมากกว่า 1 ครั้งเพื่อพิจารณาว่าใครเรียกผู้รับมอบสิทธิ์
Pnar Sbi Wer

71

คำตอบอื่น ๆ ให้ข้อมูลสำหรับ iOS 7 และเก่ากว่าแล้วอย่างไรก็ตามUIAlertViewเลิกใช้งานใน iOS 8แล้ว

ใน iOS 8 UIAlertControllerคุณควรใช้ มันจะเปลี่ยนสำหรับทั้งสองและUIAlertView UIActionSheetเอกสารอ้างอิง: UIAlertController ชั้นอ้างอิง และบทความที่ดีในNSHipster

ในการสร้าง Alert View ง่ายๆคุณสามารถทำสิ่งต่อไปนี้:

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

สวิฟต์ 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)

โปรดทราบว่าเนื่องจากมีการเพิ่มใน iOS 8 รหัสนี้จะใช้ไม่ได้กับ iOS 7 ขึ้นไป ดังนั้นน่าเศร้าสำหรับตอนนี้เราต้องใช้การตรวจสอบเวอร์ชันดังนี้:

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

สวิฟต์ 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: อัปเดตสำหรับ Swift 5 แทนที่การตรวจสอบสถานะคลาสที่ล้าสมัยด้วยการตรวจสอบความพร้อมใช้งานใน Obj-C


1
คุณไม่ควรโพสต์รหัสที่ใช้งานได้ แต่ใช้ไม่ได้ แทนที่จะใช้ MyOwnUtilsClass เพียงแค่เขียนโค้ดที่ตรวจสอบเวอร์ชัน ios
csharpwinphonexaml

1
@csharpwinphonexaml ฉันไม่เห็นด้วย มันจะเป็นความซับซ้อนที่ไม่จำเป็นของรหัส เวอร์ชันปัจจุบันแสดงการใช้งาน UIAlerView / UIAlertController ในขณะที่การตรวจสอบเวอร์ชันระบบไม่ใช่หัวข้อของคำถามนี้ ใน Swift มีวิธีการตรวจสอบเวอร์ชันของระบบปฏิบัติการแบบบรรทัดเดียวในตัวดังนั้นฉันจึงใช้มัน Objective-C มีหลายวิธี แต่ไม่มีวิธีใดที่สง่างาม
FreeNickname

1
ฉันพูดอย่างนั้นเพราะฉันรู้ว่าไม่ใช่ทุกคนที่เชี่ยวชาญในการเข้าใจโค้ดทุกชิ้นและรู้วิธีแทนที่ด้วยรหัสที่ใช้งานได้
csharpwinphonexaml

10

UIAlertView เลิกใช้งานบน iOS 8 ดังนั้นในการสร้างการแจ้งเตือนบน iOS 8 ขึ้นไปขอแนะนำให้ใช้ 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];

นี่คือวิธีที่ฉันได้นำไปใช้


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

 [alert show];
 [alert autorelease];


9

ในฐานะที่เป็นคำตอบเพิ่มเติมของสองคำตอบก่อนหน้านี้ (ของผู้ใช้ "sudo rm -rf" และ "Evan Mulawski") หากคุณไม่ต้องการทำอะไรเลยเมื่อมีการคลิกมุมมองการแจ้งเตือนคุณสามารถจัดสรรแสดงและปล่อยได้ คุณไม่จำเป็นต้องประกาศโปรโตคอลผู้รับมอบสิทธิ์


3

นี่คือวิธีการที่สมบูรณ์ที่มีเพียงปุ่มเดียวคือ 'ตกลง' เพื่อปิด 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

การแจ้งเตือนอย่างง่ายด้วยข้อมูลอาร์เรย์:

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

สำหรับ 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.