为 iOS 7.1 编程并使用 UIAlertView,这是不是也适用于 iOS 8.0?

Posted

技术标签:

【中文标题】为 iOS 7.1 编程并使用 UIAlertView,这是不是也适用于 iOS 8.0?【英文标题】:Programming for iOS 7.1, and using a UIAlertView, will this work for iOS 8.0 as well?为 iOS 7.1 编程并使用 UIAlertView,这是否也适用于 iOS 8.0? 【发布时间】:2014-10-17 18:17:29 【问题描述】:

我正在使用 Swift 编写一个应用程序,并将 ios 7.1 定位为最低版本,我注意到 UIAlertView 在 iOS 8 中已被弃用。

这是否意味着我应该只使用 UIAlertView 在我的应用中显示警报?

或者我应该使用一些代码来检查正在运行的 iOS 版本,并根据运行的 iOS 版本,对 iOS 8 使用 UIAlertController,然后使用 UIAlertView 如果他们运行的是 iOS 7?

编辑:我应该补充一点,UIAlertView 确实适用于 iOS 7 和 8,但我只是想知道是否应该对两者都使用 JUST UIAlertView,或者检查并运行 UIAlertController 如果它们在 iOS 8 上。我知道使用新 API 的最佳实践,因为另一个已弃用,所以我很好奇在两者中使用 UIAlertView 是否有问题

【问题讨论】:

试试看。会发生什么? 好吧 UIAlertView 在两个版本上都可以工作,但我很好奇是否对这两个版本都使用它是一个问题,或者我是否应该检查应用程序正在运行的版本,然后使用 UIAlertController如果他们在 iOS 8 和 UIAlertView 如果他们在 iOS 7 上。只是想知道最佳实践是什么。现在检查和运行不同的代码并没有太多的工作,我不介意只使用 UIAlertView,因为我更喜欢在 iOS 8 上使用更新的 API 【参考方案1】:

无论哪种方式,您都应该这样做。只要有效就没有关系。

如果您的应用支持多个 iOS 版本并且某个 API 仅被弃用是一些应用支持的 iOS 版本,那么仅使用旧 API 没有问题(再次假设它仍然适用于较新的 iOS)。

这样想 - 你有两个选择:

    现在只使用UIAlertView。它适用于您的应用同时支持 iOS 7 和 8。有一天,也许是明年,您决定放弃对 iOS 7 的支持。那时您可以将所有 UIAlertView 的使用替换为 UIAlertController。进行更改是一次成功的尝试。 像其他答案一样更新您的代码。编写代码现在检查UIAlertController 是否可用。如果是则使用,否则使用UIAlertView。然后明年你放弃对 iOS 7 的支持,然后更新所有现有代码以删除对UIAlertController 的检查并删除代码以使用UIAlertView。因此,您现在添加大量代码,然后进行大量更改。这是选项 1 工作量的两倍,没有任何收获。

【讨论】:

谢谢!我将只使用第一种方式,并同时使用 UIAlertView 直到我们停止支持 iOS 7【参考方案2】:

您应该尽可能使用新的 API,因为不推荐使用的方法最终可能不可用和/或不会产生您预期的结果。您应该检查UIAlertController 在运行时是否可用,然后尽可能使用它。

【讨论】:

除了极为罕见的例外,实际上没有弃用的 API 消失了。在这种情况下,开发人员有两个选择:1)使用UIAlertView,暂时不用担心。当应用程序不再支持 iOS 7 时,可以切换到使用 UIAlertController。 2) 立即更新应用程序以使用其中一个或另一个,具体取决于哪个可用。当从应用程序中删除对 iOS 7 的支持时,请移除对 UIAlertView 的使用。选项 1 的总工作量可能更少。 选项 1 也更有可能导致细微的错误,因为已弃用的 API 不再完全按预期工作【参考方案3】:

您应该考虑应用的独特要求。在大多数情况下,我同意 rmaddy。你应该默认只使用UIAlertView,直到你在你的应用中弃用iOS 7支持。不过,请花一些时间考虑一下您当前如何使用UIAlertView,以及您是否能够通过支持UIAlertController 为iOS 8 用户提供更好的体验。

它们在功能上并不相同。例如,UIAlertController 支持超过 2 个文本字段,以及带有破坏性按钮的警报(甚至超过 1 个)。

在取消帖子时,UIAlertController 的一个好地方是 Facebook 应用:

此用例可能受益于“删除”命令的红色破坏性按钮,该按钮仅在 iOS 8 中可用。如果您使用 UIAlertView 进行此类操作,请考虑在 iOS 8 上使用 UIAlertController

【讨论】:

谢谢!非常有用的信息。幸运的是,我们需要的警报在应用程序中非常简单,所以这不是问题,但这对我们的其他项目来说是件好事:)【参考方案4】:

我强烈建议您使用 iOS API 的所有新功能。

要检测是否可以运行旧警报屏幕,请使用以下代码片段:

if let gotModernAlert: AnyClass = NSClassFromString("UIAlertController") 

            println("UIAlertController can be instantiated")

            //make and use a UIAlertController

        
        else 

            println("UIAlertController can NOT be instantiated")

            //make and use a UIAlertView
        

【讨论】:

你为什么提出这个建议?支持 iOS 7 和 8 的应用程序现在可以安全地使用 UIAlertView。为什么现在添加所有这些不需要的代码更改?将来,当从应用程序中删除对 iOS 7 的支持时,可以切换到 UIAlertController。不需要所有额外的检查在运行时可用的开销。 已弃用的方法可能会被视为在审核期间拒绝应用程序的点。 这绝对是错误的。私有 API 会让你被拒绝,从未弃用的方法。 我非常怀疑这就是原因。您的问题的答案是使用已弃用的 API。您的应用不会因此而被拒绝。 什么是弃用的方法? UIDevice uniqueIdentifier 可能是唯一的情况(它不仅被弃用,而且被定为非法 - 一个非常罕见的例外)。【参考方案5】:

我倾向于同意 rmaddy。我面临同样的问题,唯一的区别是它是一个现有的应用程序,我现在准备好支持 iOS8。我发现 UIAlertView 在 iOS8 中不完全兼容前言 - 请参阅我的 SO 问题:UIAlertView automatic newline gone in iOS8?

【讨论】:

以上是关于为 iOS 7.1 编程并使用 UIAlertView,这是不是也适用于 iOS 8.0?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色

在 ios 7.1 中自定义按钮形状

iOS 7.1 UINavigationbar 和 UIToolbar

使用运行 iOS 7.1 的 iPhone 5s 时,设备令牌为零

Xcode 7.1 中的 iOS 10 推送通知

iOS 6/7 Delta 不工作 iOS 7.1