如何在iOS中实现弹出对话框


303

计算后,我想显示一个弹出框或警报框,向用户传达一条消息。有谁知道我在哪里可以找到更多有关此的信息?

Answers:


517

是啊,一个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,您可以UIAlertView在该init方法中子类化并放入自定义UI组件。如果要在UIAlertView出现一个按钮后对按钮按下做出响应,则可以设置delegate以上内容并实施该- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex方法。

您可能还需要看一下UIActionSheet


45
Apple文档说:“ UIAlertView类旨在按原样使用,不支持子类化”。developer.apple.com/library/ios/#documentation/uikit/reference/...
JOM

40
只是说明一下:启用ARC时,不需要“ [alert release]”(至少编译器这样说)。
哈维尔·塞达诺

4
iOS 4及更高版本不支持子类化UIAlertView
xySVerma

1
如果您还需要按钮操作,则是带有委托的简单UIAlertView的示例
guilherme.minglini 2013年

2
如果您正在寻找快速版本,请查看Oscar Swanros的答案
Rogerio Chaves

177

出现此问题的不同人员通过弹出框表示不同的意思。我强烈建议您阅读临时视图文档。我的回答主要是此文档和其他相关文档的摘要。

提醒(给我看一个例子)

在此处输入图片说明

警报显示标题和可选消息。用户必须在继续操作之前确认它(一键警报)或做出简单选择(两键警报)。您使用创建警报UIAlertController

值得引用文档中有关创建不必要警报的警告和建议。

在此处输入图片说明

笔记:

操作表(给我看一个例子)

在此处输入图片说明

操作表为用户提供了选择列表。根据设备的尺寸和方向,它们会出现在屏幕底部或弹出窗口中。与警报一样,a UIAlertController用于制作操作表。在使用iOS 8之前UIActionSheet,但现在文档中说明:

重要信息: UIActionSheet已被弃用iOS中8(注意,UIActionSheetDelegate也已经过时。)创建和iOS 8的管理动作片,后来,改用UIAlertControllerpreferredStyleUIAlertControllerStyleActionSheet

模态视图(给我看一个例子)

在此处输入图片说明

一个模式的看法是,有它需要完成任务的一切自包含的视图。它可能会或可能不会占据全屏。要创建一个模式的看法,使用UIPresentationController同一个模态呈现方式

也可以看看

弹窗(给我看个例子)

在此处输入图片说明

酥料饼是接出它的时候出现,当用户点击的东西,消失的景色。它有一个箭头,显示了进行点击的控件或位置。内容几乎可以放在View Controller中。您使用制作了一个弹出框UIPopoverPresentationController。(在iOS 8之前UIPopoverController是推荐的方法。)

过去,弹出式窗口仅在iPad上可用,但从iOS 8开始,您也可以在iPhone上使用它们(请参见此处此处此处)。

也可以看看

通知事项

在此处输入图片说明

通知是声音/振动,警报/横幅或标志,即使应用程序未在前台运行,它们也会通知用户。

在此处输入图片说明

也可以看看

关于Android Toasts的注意事项

在此处输入图片说明

在Android中,Toast是一条短消息,它会在屏幕上显示一小段时间,然后在不中断用户与应用程序的交互的情况下自动消失。

来自Android背景的人们想知道Toast的iOS版本是什么。他可以在这里这里这里这里找到这些问题的一些例子。答案是在iOS中没有Toast等效。提出的各种变通办法包括:

  • 用子类制作自己的 UIView
  • 导入模仿Toast的第三方项目
  • 将无按钮警报与计时器配合使用

但是,我的建议是坚持使用iOS随附的标准UI选项。不要试图让您的应用外观和行为与Android版本完全相同。考虑如何重新打包它,使其外观和感觉像一个iOS应用程序。


3
还有关于Android Toast的注释!真好!此信息可帮助来自Android开发的新开发人员。谢谢!
Filipe Brito 2015年

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 presentViewController应该有一个大括号,并且您的完成块和仅具有完成之间有什么区别:nil?
安德鲁·普鲁默

没关系 它存在一个调用块,它将被调用。
恩塔尔皮2015年

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

在我的示例中,self是UIViewController,它为弹出式窗口实现了“ presentViewController”方法。

大卫


11

对于Swift 3和Swift 4:

由于不推荐使用UIAlertView,因此有一种在Swift 3上显示Alert的好方法

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

我的完整答案在这里


0

这是Xamarin.iOS中的C#版本

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.