子类化 UIAlertController

Posted

技术标签:

【中文标题】子类化 UIAlertController【英文标题】:Subclassing UIAlertController 【发布时间】:2014-06-03 14:20:53 【问题描述】:

ios 8 之前的版本中,我们必须使用 UIAlertViewUIActionSheet

我们不允许在其中任何一个上弄乱视图层次结构或子类。

UIAlertView Documentation

UIAlertView 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

UIActionSheet Documentation

UIActionSheet 并非设计为子类化,也不应将视图添加到其层次结构中。如果您需要呈现比 UIActionSheet API 提供的自定义更多的表单,您可以创建自己的表单并使用 presentViewController:animated:completion: 以模态方式呈现它。

然而,对于 iOS8,Apple 引入了 UIAlertController 来替换 UIAlertViewUIActionSheet(查看预发布文档 here)。

所以在这个预发布文档中,没有关于不能子类化或更改视图层次结构的问题,它甚至有这个方法 addTextFieldWithConfigurationHandler: 所以我们是否能够更改视图层次结构和/或子类 UIAlertController不用担心 Apple 是否会批准或拒绝我们的申请?

【问题讨论】:

【参考方案1】:

这是一个迟到的回复,但直接来自 Apple docs。

UIAlertController 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

所以,你不应该继承 UIAlertController。

【讨论】:

【参考方案2】:

此答案已过时。请参考limon's answer。


ViewController != View。 Apple 不更改 UIAlertView 外观的政策不会影响呈现视图控制器。我看不出你为什么不能继承 UIAlertController。但是使用它可能会使用自定义生成的东西替换警报视图变得更加困难,因为警报视图现在只能由您无法控制的类间接创建。而对于 UIAlertView same rules applies as before.

【讨论】:

我已经 +1。然而这只是因为我决定在 iOS8 正式发布之前不接受答案。我希望到时候,这将得到确认,并希望您能提供最新的答案(如果需要) 无意闯入...但关于子类化 UIAlertController,我刚刚发布了这个问题 - 有什么想法吗? ***.com/q/26935703/343343 子类化会导致App被拒绝吗? 根据我的经验,任何事情都可能导致拒绝。或不。你永远不会知道。但是,是的,一个糟糕的审稿人可能会以此来证明拒绝的合理性。或不。你永远不知道。

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

CAsyncSocket 没有子类化?

子类化导航控制器有啥用? [关闭]

麻烦子类化 SCNScene

UIViewController 的 Swift 子类化子类

子类化 UIAlertController

子类化 UItableViewCell 选择