子类化UIAlertController

时间:2014-06-03 14:20:54

标签: objective-c uialertview uiactionsheet uialertcontroller

在iOS 8之前,我们必须使用UIAlertViewUIActionSheet

我们不允许弄乱它们的视图层次结构或子类。

UIAlertView Documentation

  

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

UIActionSheet Documentation

  

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

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

因此,在这个预发布文档中没有任何关于无法继承或更改视图层次结构的信息,它甚至有这个方法addTextFieldWithConfigurationHandler:所以我们能够更改视图层次结构和/或子类{ {1}}无需担心Apple会批准还是拒绝我们的申请?

2 个答案:

答案 0 :(得分:29)

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

  

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

所以,你不应该是UIAlertController的子类。

答案 1 :(得分:1)

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


ViewController != View。 Apple不改变UIAlertView外观的政策不会影响呈现视图控制器。我认为你没有理由不能将UIAlertController子类化。但是使用它可能会使用自定义增长的内容替换警报视图变得更加困难,因为警报视图现在只是由您无法控制的类间接创建。对于UIAlertView same rules applies as before