JVAlertController 1.0.1

JVAlertController 1.0.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2015年5月

Jared Verdi维护。



  • Jared Verdi

描述

JVAlertController 是适用于 iOS 7 的 `UIAlertController` 的 API 兼容回溯。

原因

考虑以下场景
1. 您希望分发一个静态库。
2. 您希望该静态库支持 iOS 7。
3. 您的静态库提供了包含警报或操作表的用户界面流程。
4. 您还希望该静态库可用于 iOS 8 扩展。

问题
UIAlertViewUIActionSheetNS_EXTENSION_UNAVAILABLE 受限制的 API,因此不能用于 iOS 8 扩展。即使在 iOS 7 上通过运行时检查通过您的对 UIAlertView/UIActionSheet 的调用,以及 iOS 8 上的 UIAlertController 调用也无法解决这个问题。

如何使用

只需像平时一样调用 UIAlertController

  • 在 iOS 8 上,JVAlertController 会做 absolutely nothing -- 所有工作都由系统框架完成。
  • 在 iOS 7 上,通过一些 objc-runtime 魔法,所有调用都会转换为 JVAlertController,并且表现像 iOS 7 上的 UIAlertViewUIActionSheet 一样。

注意

  • UIAlertView/UIActionSheet 的 iOS 7 API 不是 100% 可翻译到 UIAlertController。特别是,showFromToolbar:showFromTabBar:showFromRect: 这些概念不存在。因此,JVAlertController 在某些方面模拟了 UIAlertController 的 iOS 8 实现。
  • JVAlertController 渲染的视图并不是它们的框架对应物的像素完美表示。这主要是因为苹果在它们的私有类中捆绑的视觉效果。话虽如此,用户不太可能注意到任何重大的差异。
  • JVAlertController 并不是刻意重造 UIAlertViewUIActionSheet 在 iOS 7 实现中的错误。(在 Config.h 中打开 USE_SYSTEM_IOS7_IMPLEMENTATION 并应该能够找到一些示例)
  • 如果您在 JVAlertController 和标准 iOS 7 警报/操作表之间发现任何不一致性,请请创建一个问题。

参考文献

JVAlertControllerCédric Luthi 的 NSUUID 项目 借用了一些 ObjC 运行时 asm 巧技。

作者

Jared Verdi

许可证

麻省理工学院许可证(MIT)版权 © 2015 Jared Verdi

兹此授予任何获得本软件及其相关文档副本(统称“软件”)的个人,免费无限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供他人可以如此使用的权利,但需遵守以下条件:

上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是基于买卖、特定用途适用性或非侵权性的担保。在任何情况下,作者或版权持有人对所有索赔、损害或其他责任(无论因合同行为、侵权或其他原因而产生),概不承担法律责任,包括但不限于因使用软件或与其相关的软件或使用软件产生的损害或损失。