首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我不知道如何在UIView子类所需的init?(编码器)方法中初始化变量

在UIView子类所需的init?(编码器)方法中初始化变量的方法如下:

  1. 首先,在UIView子类中重写init?(编码器)方法。这是UIView的指定初始化方法之一,用于从Interface Builder中加载视图。
代码语言:txt
复制
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    // 在这里进行变量的初始化
}
  1. 在init?(编码器)方法中,可以使用aDecoder参数来获取从Interface Builder中设置的属性值。通过解码器,你可以获取到视图的各种属性,如frame、背景颜色等。
代码语言:txt
复制
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    // 在这里进行变量的初始化
    self.backgroundColor = aDecoder.decodeObject(forKey: "backgroundColor") as? UIColor
    self.frame = aDecoder.decodeCGRect(forKey: "frame")
    // 其他属性的解码
}
  1. 如果你的UIView子类有自定义的属性,你可以在init?(编码器)方法中进行初始化。例如,如果你的UIView子类有一个名为customProperty的属性,你可以通过解码器获取其值并进行初始化。
代码语言:txt
复制
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    // 在这里进行变量的初始化
    self.customProperty = aDecoder.decodeObject(forKey: "customProperty") as? CustomType
}
  1. 如果你的UIView子类没有从Interface Builder中设置的属性,你可以直接在init?(编码器)方法中进行变量的初始化。
代码语言:txt
复制
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    // 在这里进行变量的初始化
    self.customVariable = initialValue
}

需要注意的是,如果你在Interface Builder中设置了UIView子类的属性,并且希望在init?(编码器)方法中进行初始化,你需要确保在Interface Builder中正确设置了对应的属性键。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供灵活可扩展的云服务器实例,满足各种计算需求。产品介绍链接
  • 腾讯云云数据库MySQL版:高性能、可扩展的关系型数据库服务,适用于各种规模的应用场景。产品介绍链接
  • 腾讯云对象存储(COS):安全可靠的云端存储服务,适用于存储、备份和归档各种类型的数据。产品介绍链接
  • 腾讯云人工智能(AI):提供丰富的人工智能服务和解决方案,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网(IoT):为物联网应用提供全面的解决方案,包括设备接入、数据管理、应用开发等。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入了解 iOS 初始化

当自定义一个类时候,要么直接继承自NSObject,要么继承自UIView或者其他类。 无论继承自什么类,都经常需要新初始化方法,而这个新初始化方法其实就是新指定初始化器。...所以当调用[[UIView alloc] init]时,-init里面必然调用了-initWithFrame: 当存在一个新指定初始化时候,推荐在方法名后面加上NS_DESIGNATED_INITIALIZER...,在 Objective-C 子类会直接继承父类所有的初始化方法 Swift 在 Swift 初始化规则严格且复杂,目的就是为了使代码更加安全,如果不符合规则,会直接报错,常常会让刚接手 Swift...(成员变量)都有值 • 在 Objective-C ,如果存在一个新指定初始化器,那么原来指定初始化器就会自动退化成便利初始化器。...,调用实例方法 • 在 Swift ,如果存在继承,并且子类有新非可选类型属性,或者无法保证所有非可选类型属性都已经有默认值,那么就需要新创建一个指定初始化器,或者重写父类指定初始化器,并且在里面调用父类指定初始化

1K10

iOS_指定初始化方法Designated Initializer和非指定初始化方法Secondary Initializer

DI确保通过调用超类DI来初始化继承实例变量,通常具有最多参数并完成大部分初始化工作,而其他SI通过[self init..]调用 DI对一个类起着重要作用,它确保通过调用超类指定初始化方法初始化继承实例变量...(: UIViewinitWithCoder调用是NSObjectinit) 确保充分覆盖所有继承初始化 4.多个指定初始化方法: 当某对象实例有两种完全不同创建方式时,必须分开处理时,会出现这种情况...(并不是我们想要) // 所以类继承时:如果子类指定初始化方法与父类名称不同,那么总应覆写父类指定初始化方法 #pragma mark - override super Designated Initializer...,而是 自己初始化方法/超类其他初始化方法 // 那么Rectangle类initWithCoder:就没机会执行了(就无法将_width和_height这俩实例变量解码了) if (self...:仅包含了xib里设置数据,在初始化后会调用awakeFromNib 方法,我们需要把额外初始化动作写在这里 UIViewDI是initWithFrame: UIViewControllerDI

55230
  • 设计模式之创建型模式

    个人认为抽象工厂模式和生成者模式抽象层级最高,因为它们都可以分别用工厂方法和原型实现。而工厂方法和原型是同一个层级,它们在大多数时候是互斥,一般不能结合使用。...抽象方法定义一个用于创建对象接口,子类重写创建方法,被创建产品会有一个抽象接口,所以使用者并不知道具体得到是什么产品。...工厂方法可以是抽象方法也可以有一个默认实现,这里给出一个默认实现: class PageView: UIView { init() { super.init(frame: UIScreen.mainScreen...这时候如果是支持范型语言,就可以使用范型参数来解决这个问题(前提是工厂方法没有针对某个特定子类产品操作),我们把 PageView 改成一个范型类: class PageView<L: UILabel...,因为用 Builder 构造出来产品往往差别很大,并没有一个统一接口,所以只需要在子类声明一个返回特定产品方法即可(当然本例其实最终构造产品都是UIView,是可以提供一个统一接口)。

    65640

    在线等,挺急!

    没有详实数据统计来确认各个iOS开发者日常开发,MVC各个层面,具体时间成本如何;单从个人角度来说, View布局拆分与转换,占据了 70% 以上时间.我们公司通常是按单个完整任务来拆分工作...* 使用方法: 在xib或storyboard,将某一用于占位view custom class 设为对一个 component, 则初始化时,会自动使用此component对应xib文件内容去替换对应位置...* 注意: 对于可动态确定布局部分,tableViewcell,直接自行从xib初始化即可,不必继承于 MCComponent. */ @interface MCComponent :.... /** * 初始化. * * 子类需要继承此方法,以完成自定义初始化操作. 不要手动调用此方法. */ - (void)setup; /** * 重新加载数据....* * 子类应重写覆盖此方法.

    1.4K60

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

    这个 CALayer 子类就像任何其他层:它显示其contents属性任何内容。 该层恰好用您通过其player属性提供视频帧填充其内容。...UIView 只是 CALayer 包装器。 它提供触摸处理和辅助功能,但不是子类。 相反,它拥有并管理底层图层属性。 一个绝妙技巧是,您实际上可以指定您希望视图子类拥有的图层类型。...将 init(urls:) 替换为以下内容以初始化播放器: init(urls: [URL]) { allURLs = urls player = AVQueuePlayer() super.init...您将从完成这些事情所需实际方法开始。 首先,您需要在 LoopingPlayerUIView 公开一些可以直接访问播放器方法。...AVAudioSession.sharedInstance().setCategory(.playback) } 在初始化程序,确保调用此方法而不是旧方法init() { setVideoPlaybackCategory

    6.9K10

    Objective-C开发编码规范

    app:应用程序; calc:计算; dealloc:销毁; func:函数、方法; horiz:水平; info:信息; init:初始化; max:最大; min:最小; msg:消息; nib...【14】 合理范围内使用链式编程 UIView *myView = [[UIView alloc] init]; 但是嵌套不宜超过3层,超过3层需进行重构。 【15】 函数调用时所有参数在同一行。...【18】 当需要一定条件才执行某项操作时,最左边应该是最重要代码,不要将最重要代码内嵌到if良好风格是: - (void) someMethod { if(!...在写方法或者函数时,把花括号开头放在跟方法同一行。 【20】 明确指定构造函数,并有适当注释。 【21】 不要在init方法变量或者说属性初始化为0或者nil,因为没有必要。...【22】 UIView子类初始化时候,不要进行任何布局操作。

    86750

    iOS学习——UIPickerView实现年月选择器

    其中并没有我们所需只显示年月选择器,在网上找了很多相关资料,但是觉得都写得过于麻烦。...*lineView; /** 初始化子视图 ,整体布局*/ - (void)initUI; //以下三种方法在基类实现都是空白,具体效果在子类重写 /** 点击背景遮罩图层事件 */ -...,然后在BaseView.h注释我们说过了,点击背景遮罩图层和取消、确定按钮点击事件实现效果在基类中都是空白,具体效果在子类中进行重写来控制。...  首先是我们子类向外暴露方法只有一个类方法,该方法主要是让使用者提供选择器标题、最小日期、日期选择完成后操作等基本信息,方便我们对选择器数据和操作进行设置。...关于自己做这个在使用上就非常简单了,我们子类向外就暴露了一个类方法,所以我们再需要弹出选择器地方调用该方法就可以了。

    4.3K130

    GB代码规范1.0

    对于属性不同作用 比如设置颜色 设置字体 设置其他样式 可以进行分组 对于方法作用分类 比如添加功能 删除功能 对于其他代理方法 Get Set方法 Init初始化方法 BOOL类型属性声明...set 开头进行命名 如果不是写初始化方法不要用init进行开头 如果不是属性set方法不要用set作为方法前缀 {}写法 建议写法 if(YES) { doing something }..., GBAppRunDeveloperModeRelease }GBAppRunDeveloperMode; 对于初始化一定要使用类对应初始化方法 比如UIView对应初始化方法为 - (instancetype...UIScreen mainScreen].bounds] 对于只在m内部声明const 需要添加static 这个觉得可以不加 但是无法看到苹果实现 所以不知道苹果规范怎么写 建议写法 static...= @"" 对于局部变量尽量初始化 局部变量初始化 属性有默认值 所以我们不必须对于属性进行初始化 之前遇到一个BUG就是int类型没有初始化给我默认Nan造成崩溃 建议写法 int

    1.2K20

    谈谈对drawRect理解

    默认情况下,该方法在视图加载过程不做任何人处理。当子类使用Core Graphics和UIKit绘制视图内容时就需要在该方法添加绘制代码。...不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释drawRect方法,也许从这一点就能看出这个方法重要性。...这个是由系统自动调用,主要是在UIViewControllerloadView和viewDidLoad方法调用之后; 如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用...,具体调用时机同上; drawRect使用注意事项 如果子类直接继承自UIView,则在drawRect 方法不需要调用super方法。...若子类继承自其他View类则需要调用super方法以实现重绘。 若使用UIView绘图,只能在drawRect:方法获取绘制视图contextRef。

    1.7K20

    iOS开发之画图板(贝塞尔曲线)

    一.封装画图板     其实上面的白板就是一继承于UiView一个子类,我们可以在这个子类添加我们画图板相应属性和方法,然后实例化成对象添加到ViewController,当然为了省事添加白板时候是通过...1.封装白板第一步是新建一个UIView子类MyView,然后添加相应属性和方法。...; 6 @end     3.下面的代码就是实现部分代码了,会根据不同功能给出相应说明       (1).初始化我们白板,给线条指定默认颜色和宽度并且给相应变量分配内存空间,初始化代码如下:...    上面是封装画图板要用到全部代码,下面的代码就是如何在ViewController中使用我们画图板了,如何实例化控件,以及控件初始化,注册回调等在这就不做赘述了,下面给出了主要控件回调方法...保存时候是先截了个屏,然后把白板进行切割,把切割后图片存入到相册,代码如下: 1 //把画图保存到相册 2 - (IBAction)tapSave:(id)sender { 3 /

    1.5K100

    layoutSubviews 详解

    大家好,又见面了,是你们朋友全栈君。...初始化不会触发layoutSubviews 但是是用initWithFrame 进行初始化时,当rect值不为CGRectZero时,也会触发 2、addSubview会触发layoutSubviews...会触发父UIViewlayoutSubviews事件 6、改变一个UIView大小时候也会触发父UIViewlayoutSubviews事件 在苹果官方文档强调: You should...刷新子对象布局 –layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写 -setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局...不应该在子类中被重写,应该重写sizeThatFits sizeThatFits传入参数是receiver当前size,返回一个适合size sizeToFit可以被手动直接调用 sizeToFit

    46830

    一份走心iOS开发规范

    方法使用规范) Init方法(讲述初始化方法设计规范包括designated init方法和secondary init方法) Init error(讲述init方法初始化对象失败时错误处理)...问题就是:当你从Cocoa framework(即Cocoa系统库)某个类派生出来一个子类时,你并不知道子类定义私有方法是否覆盖了父类私有方法,即有可能你自己在子类实现私有方法和父类某个私有方法同名...【建议】如果你是要子类化Cocoa Frameworks一个非常庞大复杂类(比如NSView或UIView),并且你想绝对的确保你自己子类私有方法名和父类私有方法名不重复。...【必须】如果超类某个初始化方法不适用于子类,则子类应该覆写这个超类方法,并在其中抛出异常。 【必须】禁止子类designated初始化方法调用父类secondary初始化方法。...【建议】把一些稳定、公共变量或者方法抽取到父类子类尽量只维持父类所不具备特性和功能。 【建议】.h文件尽量不要声明成员变量。 【建议】.h文件属性尽量声明为只读。

    12K145

    202 - Swift 核心是什么?

    (image-fd804b-1517807204933)] 这张图是在网上找到一篇文章截图,下面是文章地址: 不要用子类!...NSObject ,也就是说都是 class 类型,比如在开发中有几十个控制器都继承自某个自定义基类,就会把基类所有的方法也继承下来,但是这些方法对每一个子类都有用吗?...答案肯定是否定。所以,既然子类不需要,何必要继承父类方法呢?自己方法应该由自己决定才对,而现在是基类帮着子类决定了它方法。...当我自定义 UIView 时候,想让 view 从 xib 加载,那么就需要在每个类里都写一个从 xib 加载方法,如下代码: static func classMethodCreateView...struct 类型方法要加 static修饰,class类型方法要加 class 修饰。 struct 有默认初始化方法,class 需要指定变量初始值。

    95620

    iOS UI控件了解一下

    iOS中用UIView来表示视图,App能看到元素,都是UIView及其子类,通俗说各种UI控件都属于view,不同控件代表不同种类view。iOS中所有能看到内容都是view或其子类。...UIView提供了其他添加视图方法(详见下表): ? 2)管理视图层次 UIView除了提供添加视图方法,还提供了管理视图层次方法(详见下表): ?...(2)UILabel是UIView子类,作为子类一般是为了扩充父类功能,UILabel扩展了文字显示功能,UILabel是能显示文字视图。 2)如何使用UILabel?...(1)创建UILabel与创建UIView步骤很相似。 ①开辟空间并初始化(如果本类有初始化方法,使用自己;否则使用父类)。 ②设置文本控制相关属性。...①开辟空间并初始化(如果本类有初始化方法,使用自己;否则使用父类); ②设置文本显示、输入相关属性; ③添加到父视图上,用以显示; ④释放; 3)UITextField

    2.6K20

    layoutSubviews总结

    大家好,又见面了,是你们朋友全栈君。...初始化不会触发layoutSubviews 可是是用initWithFrame 进行初始化时,当rect值不为CGRectZero时,也会触发 2、addSubview会触发layoutSubviews...会触发父UIViewlayoutSubviews事件 6、改变一个UIView大小时候也会触发父UIViewlayoutSubviews事件 在苹果官方文档强调: You should...刷新子对象布局 -layoutSubviews方法:这种方法,默认没有做不论什么事情,须要子类进行重写 -setNeedsLayout方法: 标记为须要又一次布局,异步调用layoutIfNeeded...不应该在子类中被重写,应该重写sizeThatFits sizeThatFits传入參数是receiver当前size,返回一个适合size sizeToFit能够被手动直接调用 sizeToFit

    22820
    领券