初始化自定义类 UIVIew

Posted

技术标签:

【中文标题】初始化自定义类 UIVIew【英文标题】:Init custom class UIVIew 【发布时间】:2015-08-31 21:19:55 【问题描述】:

尝试使用 xib 文件初始化我的自定义类 UIVIew,但在尝试初始化属性时崩溃:

import Foundation
import UIKit

class ReportView: UIView 

@IBOutlet weak var textView: UITextView!

override init (frame : CGRect) 
    super.init(frame : frame)



convenience init () 
    self.init(frame:CGRectZero)


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


func addBehavior ()
    textView.layer.borderWidth = 1.0
    textView.layer.borderColor = UIColor(red: 170/255, green: 170/255, blue: 170/255, alpha: 0.5).CGColor
    textView.layer.opacity = 0.9
    textView.layer.cornerRadius = 3
    textView.clipsToBounds = true


在 textview 上崩溃:致命错误:在展开可选值时意外发现 nil

【问题讨论】:

你连接插座了吗? 【参考方案1】:

根据您的 xib 的外观,可能存在两个问题:

    要么您的插座未连接到 xib。

    或者在初始化过程中插座不可用,所以你无法访问textView,它仍然是nil。那么正确的做法是重写awakeFromNib 方法并将addBehavior 放在那里。

【讨论】:

不知道 awakeFromNib 函数,每天都在学习。解决了! @user3722523 顺便说一句,整个addBehavior 设置,包括层的设置都可以在Interface Builder 中设置(在User Defined Runtime Attributes 下),但如果您的目标是重用,那么显然您的解决方案会更好.

以上是关于初始化自定义类 UIVIew的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于自定义 UIView 类

有没有办法让自定义类在 UIView 上起作用,而无需在初始化时传递 ViewController(作为参考)?

如何将额外的参数传递给自定义UIView类以便在swift中进行初始化

有没有办法让自定义类在UIView上进行操作而不需要在初始化时传递ViewController(作为参考)?

使用参数创建自定义 UIView 初始化方法

为 UIView 创建自定义初始化方法以添加 UILabel