UIAlertController 子类问题迅速

Posted

技术标签:

【中文标题】UIAlertController 子类问题迅速【英文标题】:UIAlertController subclass issue swift 【发布时间】:2015-11-24 22:18:12 【问题描述】:

我想创建一个 UIAlertController 的子类,但我快疯了,因为我的构造函数有问题,这是我的子类:

class loginAlert :  UIAlertController 

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)

    


我认为这个子类必须有构造函数: UIAlertController(title: String, message: String, preferredStyle: UIAlertControllerStyle) ,因为它是 UIAlertController 的子类,但是当我这样做时

loginAlert(title: "test", message: "test", preferredStyle: .Alert)

我得到错误,为什么我错在哪里?

【问题讨论】:

错误是什么?为什么要继承 UIAlertController ? 因为我想创建一个在我的代码中经常使用的标准 uialertController 事实上,如果您愿意,您可以继承UIAlertController 并自定义它的一些私有属性。请注意,Apple 在提交到商店时会检查私有财产和 API 使用情况:iphonedevwiki.net/index.php/UIAlertController 对不起,你说苹果检查私有财产是什么意思? 【参考方案1】:

来自UIAlertController Class Reference:

子类化注释 UIAlertController 类旨在用于 原样并且不支持子类化。此视图层次结构 类是私有的,不能修改。

您可以创建一个视图控制器,其视图包含透明度,其 UIModalPresentationStyle 为 .OverCurrentContext 且 UIModalTransitionStyle 为 .CrossDissolve 以获得非常相似的效果。

或者您可以在 UIAlertController 上编写一个扩展,该扩展可以添加需要跨类共享的方法(例如,呈现重复出现警报的方法)。有关扩展的更多信息,请参阅here。

【讨论】:

好的,但是如果我想创建一个标准的警报控制器,因为我必须在我的代码中使用它 如果是标准的,你为什么要子类化? 有关如何使用 UIAlertController 的概述,请参见此处:nshipster.com/uialertcontroller 创建警报的函数怎么样? 你可以在 UIAlertController 上写一个扩展,可以添加方法和计算值。【参考方案2】:

在类外创建 UIAlertController 的函数

public  func alert () 
    let alert = UIAlertController(title: "Title", message: "I don't feel creative", preferredStyle: UIAlertControllerStyle.Alert)
    // As many action as you want
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil)
    alert.addAction(action)
    self.presentViewController(alert, animated: true, completion: nil)

但正如 beyowulf 所说,如果你想向 UIAlertController 添加方法,你可以使用扩展

【讨论】:

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

如何为 uialertview 或 UIAlertController 中的特定单词着色? (迅速)

子类化 UIAlertController

子类化 UIAlertController 并遇到运行时错误

Swift:自定义 UIAlertController 视图

UIAlertController 在 iOS 10 中自动关闭

UIAlertViewController 中具有圆角矩形边框样式的文本字段。 (迅速)