วิธีใช้กล่องโต้ตอบป็อปอัพใน iOS


303

หลังจากการคำนวณฉันต้องการแสดงกล่องป๊อปอัพหรือแจ้งเตือนข้อความที่ส่งถึงผู้ใช้ ไม่มีใครรู้ว่าฉันสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่ไหน?

คำตอบ:


517

ใช่ a UIAlertViewอาจเป็นสิ่งที่คุณกำลังมองหา นี่คือตัวอย่าง:

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

หากคุณต้องการทำอะไรที่แฟนซีมากกว่านั้นให้พูดแสดง UI ที่กำหนดเองในของUIAlertViewคุณคุณสามารถ subclass UIAlertViewและใส่องค์ประกอบ UI ที่กำหนดเองในinitวิธีการ หากคุณต้องการที่จะตอบสนองต่อการกดปุ่มหลังจากที่UIAlertViewปรากฏขึ้นคุณสามารถตั้งค่าdelegateข้างต้นและใช้- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexวิธีการ

UIActionSheetนอกจากนี้คุณยังอาจต้องการที่จะมองไปที่


45
เอกสารของ Apple กล่าวว่า "คลาส UIAlertView นั้นมีจุดประสงค์เพื่อใช้ตามสภาพและไม่รองรับการทำคลาสย่อย" developer.apple.com/library/ios/#documentation/uikit/reference/
......

40
เพียงแค่แสดงความคิดเห็น: เมื่อเปิดใช้งาน ARC แล้วไม่จำเป็นต้องมี '[การแจ้งเตือนการเปิดใช้งาน' '(อย่างน้อยคอมไพเลอร์พูดอย่างนั้น)
Javier Sedano

4
ไม่รองรับการแบ่งคลาส UIAlertView iOS 4 เป็นต้นไป
xySVerma

1
นี่คือตัวอย่างของ UIAlertView แบบง่ายพร้อมผู้รับมอบสิทธิ์หากคุณต้องการปุ่มต่าง ๆ
guilherme.minglini

2
ในกรณีที่คุณกำลังมองหาเวอร์ชั่นที่รวดเร็วลองดูคำตอบของ Oscar Swanros
Rogerio Chaves

177

คนต่าง ๆ ที่มาที่คำถามนี้หมายถึงสิ่งที่แตกต่างกันโดยกล่องป๊อปอัพ ฉันขอแนะนำให้อ่านเอกสารมุมมองชั่วคราว คำตอบของฉันส่วนใหญ่เป็นบทสรุปของเอกสารนี้และเอกสารอื่น ๆ ที่เกี่ยวข้อง

แจ้งเตือน(แสดงตัวอย่าง)

ป้อนคำอธิบายรูปภาพที่นี่

การแจ้งเตือนแสดงชื่อเรื่องและข้อความเพิ่มเติม ผู้ใช้ต้องรับทราบ (การแจ้งเตือนด้วยปุ่มเดียว) หรือทำการเลือกอย่างง่าย (การแจ้งเตือนแบบสองปุ่ม) ก่อนดำเนินการ คุณสร้างการแจ้งเตือนด้วยUIAlertControllerคุณสามารถสร้างการแจ้งเตือนด้วย

เป็นมูลค่าการอ้างอิงคำเตือนของเอกสารและคำแนะนำเกี่ยวกับการสร้างการแจ้งเตือนที่ไม่จำเป็น

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ:

Action Sheet (แสดงตัวอย่างให้ฉันดู)

ป้อนคำอธิบายรูปภาพที่นี่

เอกสารการดำเนินการให้ผู้ใช้รายการตัวเลือก โดยจะปรากฏที่ด้านล่างของหน้าจอหรือในป๊อปโอเวอร์ขึ้นอยู่กับขนาดและทิศทางของอุปกรณ์ เช่นเดียวกับการแจ้งเตือน a UIAlertControllerใช้สำหรับสร้างแผ่นงาน ก่อนที่จะใช้ iOS 8 UIActionSheetแต่ตอนนี้เอกสารบอกว่า:

สำคัญ: UIActionSheetจะเลิกใน iOS 8. (หมายเหตุว่าUIActionSheetDelegateยังจะเลิก.) เพื่อสร้างและจัดการแผ่นการดำเนินการใน iOS 8 และต่อมาแทนที่จะใช้UIAlertControllerกับของpreferredStyleUIAlertControllerStyleActionSheet

Modal View (แสดงตัวอย่างให้ฉันดู)

ป้อนคำอธิบายรูปภาพที่นี่

มุมมองกิริยาเป็นมุมมองที่ตนเองมีที่มีทุกสิ่งที่จะต้องทำงานให้เสร็จสมบูรณ์ อาจหรือไม่อาจใช้แบบเต็มหน้าจอ เพื่อสร้างมุมมองกิริยาใช้UIPresentationControllerกับหนึ่งในรูปแบบการนำเสนอ Modal

ดูสิ่งนี้ด้วย

Popover (แสดงตัวอย่างให้ฉันดู)

ป้อนคำอธิบายรูปภาพที่นี่

popoverคือมุมมองที่ปรากฏขึ้นเมื่อก๊อกผู้ใช้ในบางสิ่งบางอย่างและจะหายไปเมื่อแตะปิดมัน มันมีลูกศรแสดงการควบคุมหรือตำแหน่งจากการแตะ เนื้อหาสามารถเป็นอะไรก็ได้ที่คุณสามารถใส่ใน View Controller คุณทำให้ popover UIPopoverPresentationControllerกับที่ (ก่อน iOS 8UIPopoverControllerเป็นวิธีที่แนะนำ)

ในอดีตที่ผ่านมา popovers ใช้ได้เฉพาะบน iPad แต่เริ่มต้นกับ iOS 8 คุณยังสามารถได้รับพวกเขาบน iPhone (ดูที่นี่ , ที่นี่และที่นี่ )

ดูสิ่งนี้ด้วย

การแจ้งเตือน

ป้อนคำอธิบายรูปภาพที่นี่

การแจ้งเตือนคือเสียง / การสั่นสะเทือนการแจ้งเตือน / แบนเนอร์หรือป้ายที่แจ้งให้ผู้ใช้ทราบถึงบางสิ่งแม้ว่าแอพจะไม่ทำงานในเบื้องหน้า

ป้อนคำอธิบายรูปภาพที่นี่

ดูสิ่งนี้ด้วย

หมายเหตุเกี่ยวกับ Android Toasts

ป้อนคำอธิบายรูปภาพที่นี่

ใน Android Toastเป็นข้อความสั้น ๆ ที่ปรากฏบนหน้าจอเป็นระยะเวลาสั้น ๆ จากนั้นจะหายไปโดยอัตโนมัติโดยไม่รบกวนการโต้ตอบของผู้ใช้กับแอพ

ผู้ที่มาจากพื้นหลังของ Android ต้องการทราบว่าเวอร์ชันของ iOS คืออะไร ตัวอย่างบางส่วนของคำถามเหล่านี้เขาสามารถพบได้ที่นี่ , ที่นี่ , ที่นี่และที่นี่ คำตอบก็คือไม่มีเทียบเท่ากับขนมปังปิ้งใน iOS วิธีแก้ปัญหาต่าง ๆ ที่มีการนำเสนอรวมถึง:

  • ทำของคุณเองด้วย subclassed UIView
  • นำเข้าโครงการของบุคคลที่สามที่เลียนแบบ Toast
  • ใช้การแจ้งเตือนแบบ buttonless ด้วยตัวจับเวลา

อย่างไรก็ตามคำแนะนำของฉันคือติดกับตัวเลือก UI มาตรฐานที่มาพร้อมกับ iOS แล้ว อย่าพยายามทำให้แอปของคุณดูและประพฤติตนเหมือนกับเวอร์ชั่น Android คิดเกี่ยวกับวิธีการบรรจุหีบห่อใหม่เพื่อให้มีลักษณะและความรู้สึกเหมือนแอพ iOS


3
ด้วยหมายเหตุเกี่ยวกับขนมปังปิ้ง Android ยัง! ดี! ข้อมูลนี้ช่วยให้นักพัฒนาใหม่ที่มาจากการพัฒนา Android ขอบคุณ!
Filipe Brito

3
ผู้ชายฉันต้องพิมพ์และใส่กรอบนี้! คุณช่วยฉันเมื่อวานและวันนี้อีกครั้ง: D
finngu

58

ตั้งแต่การเปิดตัว iOS 8 UIAlertViewตอนนี้เลิกใช้แล้ว UIAlertControllerเป็นการแทนที่

นี่คือตัวอย่างของลักษณะใน 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
}

อย่างที่คุณเห็น API ช่วยให้เราสามารถใช้การเรียกกลับสำหรับทั้งการกระทำและเมื่อเราแสดงการแจ้งเตือนซึ่งมีประโยชน์มาก!

อัปเดตสำหรับ 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 ในปัจจุบันควรให้ ViewContController มีเครื่องหมายวงเล็บปิดและอะไรคือความแตกต่างระหว่างบล็อคการเติมเต็มของคุณและการเติมให้สมบูรณ์: ไม่มี?
Andrew Plummer

มันไม่แตกต่างกัน มันมีบล็อกที่จะโทรมันจะถูกเรียก
Entalpi

25

อัปเดตสำหรับ iOS 8.0

ตั้งแต่ iOS 8.0 คุณจะต้องใช้ UIAlertController ดังนี้:

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

ที่ตัวเองในตัวอย่างของฉันเป็น UIViewController ซึ่งใช้วิธี "presentViewController" สำหรับป๊อปอัพ

เดวิด


11

สำหรับ Swift 3 และ Swift 4:

เนื่องจาก UIAlertView เลิกใช้แล้วมีวิธีที่ดีสำหรับการแสดงการแจ้งเตือนบน 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)

เลิกใช้แล้ว:

นี่เป็นเวอร์ชั่นที่รวดเร็วซึ่งได้รับแรงบันดาลใจจากคำตอบที่เลือก:

แสดง AlertView:

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

เพิ่มผู้รับมอบสิทธิ์ไปยังตัวควบคุมมุมมองของคุณ:

class AgendaViewController: UIViewController, UIAlertViewDelegate

เมื่อผู้ใช้คลิกที่ปุ่มรหัสนี้จะถูกดำเนินการ:

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


}

UIAlertView เลิกใช้แล้ว
Parth Sane

7

แม้ว่าฉันจะเขียนภาพรวมของป๊อปอัปประเภทต่าง ๆ แล้ว แต่คนส่วนใหญ่ก็ต้องการการแจ้งเตือน

วิธีการใช้กล่องโต้ตอบแบบผุดขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

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

คำตอบของฉันคือฟูลเลอร์ที่นี่


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