我想要子类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()

(编辑:我对我的答案进行了编辑,以便初始化式之间的关系更加清晰)

Ios相关问答推荐

React Native Text组件内部TextInput组件在iOS上的问题:在TextInput组件内部键入文本时失go 焦点

IFrame内容拒绝仅在iOS浏览器上加载-即使发布了内容-安全-策略(CSP)框架-祖先指令

SwiftUI检测顶级和安全区域插图

IOS-获取本地化系统映像

NSHashTable要求任何MyCustomProtocolAnyObject都是类类型

更改初始控制器无效

iOS上从谷歌云存储API不断收到网络连接已丢失的错误信息

NavigationLink 只能在文本部分点击

CGPath intersection(_:using:) 和朋友(iOS 16 中的新功能)坏了?

使用 Apollo 发布 iOS 应用程序时缺少推送通知权利

SwiftUI withAnimation 在视图出现之前不会启动

Xcode 14 弃用了位码 - 但为什么呢?

滑动以返回特定的 SwiftUI 视图

Flutter:无法构建 iOS 应用程序ARCHIVE FAILED,为设备归档时遇到错误

在 Swift 中执行 while 循环

iOS:使用 UIView 的 'drawRect:' 与其层的委托 'drawLayer:inContext:'

如何从一个特定的视图控制器中隐藏导航栏

使用导航控制器在prepareForSegue中设置数据

无效的 iPhone 应用程序二进制文件

我可以通过 UIAppearance 代理设置哪些属性?