9

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

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

UIAlertView文档

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

UIActionSheet文档

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

然而,对于 iOS8,Apple 已经引入UIAlertController了替换这两个UIAlertView和(在此处UIActionSheet查看预发布文档)。

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

4

2 回答 2

29

这是一个迟到的回应,但直接来自 Apple文档

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

所以,你不应该继承 UIAlertController。

于 2015-11-30T20:42:14.533 回答
1

这个答案已经过时了。请参考limon 的回答


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

于 2014-06-21T23:46:51.977 回答