UIAlertView 和 UIAlertController

Posted

技术标签:

【中文标题】UIAlertView 和 UIAlertController【英文标题】:UIAlertView And UIAlertController 【发布时间】:2015-09-14 15:45:26 【问题描述】:

我在 xcode 6 中使用 SWIFT 来开发我的应用程序,并且需要支持适用于 iphone 4 和更高版本的应用程序...所以选择了“部署目标”作为 7.1。简单来说需要支持iOS7,iOS8 AND iOS9...

在使用 Alert View 时,我在很多地方都遇到过现在讨论我们必须使用新引入的 'UIAlertController' 而不是旧的 'UIAlertView'... p>

通过阅读了解 UIAlertView 已从 ios 8 中弃用。

但就我而言,因为我必须支持 ios 7.1,而且我不能只使用“UIAlertController”。

正如许多教程所解释的那样,我开始按照以下方式使用...

if (objc_getClass("UIAlertController") != nil)

    // Use UIAlertController

else

    // Use UIAlertView

但是以这种方式必须编写两次相同的代码,真的很烦人......要么我必须创建一个将两者结合起来的自定义 Alertview,要么需要继续像这样编码......

但只是为了测试,我只使用了UIAlertView(忽略 UIAlertController),即使在 ios 8 模拟器中应用程序也能正常运行......但文档说 UIAlertView 从 iOS 8.0 开始已弃用。 ..

所以我的问题是,想听听通过这些 API 更改继续我的应用程序的最佳做法...如果我忽略 'UIAlertController' 并使用旧的 'UIAlertView' 直到有一天停止对iOS7的支持......这对我的应用程序有什么影响吗?谢谢

【问题讨论】:

UIAlertView 适用于 iOS 8 和 9。这是一个选项 - 只需使用 UIAlertView。一旦您的应用不再支持 iOS 7,您就可以切换为仅使用 UIAlertViewController 查看我的答案***.com/questions/26258693/… 嗨 rmaddy,是的,我也是这么想的。要使用 UIAlertView(忽略 UIAlertController),因为目前需要支持 ios 7.1 ......但是正如文件所说 UIAlertView 已从 iOS 8.0 中弃用,完全困惑......为什么他们这样说,如果它在以后的版本中可以正常工作好吗? 嗨 iAnurag,是的,正在做类似的检查以确定 UIAlertController 是否可用......但我的问题是,如果 UIAlertView 在 ios 8 中工作正常,为什么我们需要像这样单独检查和 9. 我知道使用 UIAlertController 很容易,但是只要 UIAlertView 可以在以后的版本中正常工作(只需编写相同的代码 2 次),实现这两者显然是没有意义的......我需要知道使用 UIAlertController 忽略它有多好并使用 UIAlertView 直到完全停止对 IOS 7 的支持......同样的事情 'rmaddy' 说 “已弃用”并不意味着“已删除”。这只是意味着它可以在未来被移除。另见this question。我会继续使用UIAlertView,直到你不再支持 iOS 7。 【参考方案1】:

我已经围绕这两个类编写了一个包装器,它根据 iOS 版本使用适当的类。

在这里找到

https://github.com/amosavian/ExtDownloader/blob/master/Utility%2BUI.swift

要显示一个简单的警报,请使用:

 Utility.UI.alertShow("message", withTitle: "title", viewController: self);

显示动作视图:使用以下代码:

let buttons = [Utility.UI.ActionButton(title: "Say Hello", buttonType: .Default, buttonHandler:  () -> Void in
        print("Hello")
    )]
Utility.UI.askAction("message", withTitle: "title", viewController: self, anchor: Utility.UI.AnchorView.BarButtonItem(button: uibarbuttontapped), buttons: buttons)

如果您在 iPhone 中呈现动作,它会自动添加一个取消按钮。但是您可以通过定义类型为“.Cancel”的按钮来自定义取消按钮

如果要显示模式警报视图,请使用以下代码:

let cancelBtn = Utility.UI.AlertButton(title: "Cancel", buttonType: .Cancel, buttonHandler: nil)
let okBtn = Utility.UI.AlertButton(title: "OK", buttonType: .Default, buttonHandler:  (textInputs) -> Void in
            print("OK button pressed")
)
Utility.UI.askAlert("message", withTitle: "title", viewController: self, buttons: [cancelBtn, okBtn], textFields: nil)

如您所见,上面的文本字段设置为 nil。如果您想向用户询问某些内容,您可以设置它,如下所示:

let cancelBtn = Utility.UI.AlertButton(title: "Cancel", buttonType: .Cancel, buttonHandler: nil)
let okBtn = Utility.UI.AlertButton(title: "OK", buttonType: .Default, buttonHandler:  (textInputs) -> Void in
        print("You entered" + textInputs[0])
    
)
let textFields = [Utility.UI.AlertTextField(placeHolder: "enter secret text here", defaultValue: "", textInputTraits: TextInputTraits.secretInput())]
Utility.UI.askAlert("Enter password", withTitle: "title", viewController: self, buttons: [cancelBtn, okBtn], textFields: textFields)

您几乎可以自定义所有内容。例如,通过定义自定义 textInputTrait,您可以轻松自定义文本输入。你也不必处理代表,而是有简单的闭包。请阅读代码以了解更多信息。

【讨论】:

以上是关于UIAlertView 和 UIAlertController的主要内容,如果未能解决你的问题,请参考以下文章

iOS:简单使用UIAlertVIew和UIActionSheet

UIAlertView 里面有图片和文字

UIAlertView、NSURLConnection 和 wait_fences

UIAlertView 操作和取消按钮

UIAlertView和UIActivityIndicatorView的使用

Xcode 4.2、UIAlertView 和 UIAlertButton?