当前位置: 首页 > 面试题库 >

Swift子类UIView

鲁明知
2023-03-14
问题内容

我想子类化UIView并显示类似视图的登录名。我已经在Objective-
C中创建了它,但是现在我想将其移植到Swift。我不使用情节提要,所以我用代码创建了所有UI。

但是第一个问题是我必须执行initWithCoder。我给了它一个默认的实现,因为它不会被调用。现在,当我运行程序时,它崩溃了,因为我也必须实现initWithFrame。现在我得到了:

override init() {
    super.init()
    println("Default init")
}

override init(frame: CGRect) {
    super.init(frame: frame)
    println("Frame init")
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    println("Coder init")
}

我的问题是我应该在哪里创建文本字段等…,如果我从不实现框架和编码器,该如何“隐藏”呢?


问题答案:

我通常这样做,有点冗长。

class MyView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        addBehavior()
    }

    convenience init() {
        self.init(frame: CGRect.zero)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }

    func addBehavior() {
        print("Add all the behavior here")
    }
}



let u = MyView(frame: CGRect.zero)
let v = MyView()

(编辑:我已经编辑了答案,以使初始化程序之间的关系更加清晰)



 类似资料:
  • 问题内容: 在Objective C中很简单:只需更新main.m文件并更改UIApplicationMain()参数即可 但是由于该指南指出,因此没有main.m文件 “在全局范围内编写的代码被用作程序的入口点,因此您不需要主要功能。” 那么,如何快速将UIApplication子类化?有什么建议吗? 问题答案: 注意: 如果您正在寻找以前的语法,请在2019年6月对XCode 10.1和Swi

  • 问题内容: 我有一个使用自定义方法连接到xib 的子类。 有没有办法可以在方法中初始化此单元格并仍然重用它?还是我必须使用重用标识符注册类本身? 问题答案: 惯用的NIB流程为: 使用重用标识符注册您的NIB。在Swift 3中 } 在Swift 2中: 定义您的自定义单元格类: class NameInput: UITableViewCell { } 在Interface Builder中创建一

  • 问题内容: 是否有一种标准方法可以在Swift中制作“纯虚函数”,即。一个 必须 由每个子类中被覆盖,并且,如果不是的话,将导致编译时错误? 问题答案: 您有两种选择: 将超类定义为协议而不是类 Pro :编译时检查每个“子类”(不是实际的子类)是否实现了所需的方法 缺点 :“超类”(协议)无法实现方法或属性 2.声明该方法的超级版本 例: Pro :可以在超类中实现方法和属性 缺点 :不检查编译

  • 问题内容: 考虑两个类。第一个是,其子类符合: 第二类继承自: 该代码无法编译,因为: 使用元类型值构造“ Vehicle”类类型的对象必须使用“ required”初始化程序。 因此,我继续添加所需的初始化程序: 现在,应用程序可以编译,并且对象可以正确响应。 两个问题: 为什么构造具有元类型的对象需要初始化程序?(看来我编写的初始化程序没有任何作用。) 我写错了什么,还是 应该 添加到初始化程

  • 问题内容: 我正在尝试在Swift中启动一个新的基于文档的Cocoa项目,并想创建一个子类(如在基于文档的应用程序的Apple指南中所建议的那样)。在ObjC中,您将创建一个子类的实例来发送消息,并通过调用superclasses方法相应地实现了该消息。 在斯威夫特仅作为一种方便的初始化,指定初始化的就是这显然想让我在一个窗口中通过。 我不能从我的子类中调用,因为它不是指定的初始化器,所以显然我必

  • Swift 4中的类是灵活构造的构建块。 与常量,变量和函数类似,用户可以定义类的属性和方法。 Swift 4提供了一些功能,在声明类时,用户无需创建接口或实现文件。 Swift 4允许将类创建为单个文件,并且当初始化类后,默认情况下将创建外部接口。 使用类的好处 - 继承并获取另一个类的属性 类型转换使用户可以在运行时检查类类型 去初始化器负责释放内存资源 引用计数允许类实例具有多个引用 类和结