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

iOS-自定义View的封装

在开发过程中,自定义控件使用的频率非常高,接下来简单对自定义控件做个小结 View的封装 如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部的子控件创建封装起来,不让外界看见 外界可以传入对应的数据模型给...view,view拿到模型数据后给内部子控件设置对应的数据 代码封装 新建一个继承UIView的类 在initWithFrame:方法中添加子控件(也可以使用懒加载) 重写模型属性set方法,在set方法中设置模型属性到子控件上...上的layoutSubviews事件 - 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件 完整的例子 @class ImageData; @interface...封装 新建一个继承UIView的类 新建一个xib文件(xib的文件名最好和控件名一样,修改最外面那个控件的class为控件类名 ) 创建xib 添加子控件、设置子控件属性...而用xib相对于比较死板,但是更简单,更方便 自定义UIView时,如果该View一直一个样式,推荐使用xib,简单方便 而子控件经常随着父控件变化而变化,推荐使用纯代码,灵活多变

30310

iOS - Swift 面向协议编程(二)面向对象开发

上一篇文章iOS - Swift 面向协议编程(一) 已经对Swift的面向协议编程做了介绍,接下来该篇文章将使用面向协议开发(POP)来做下实际的应用 在实际开发中,自定义View基本上是必须的...FirstTypeView 2 创建一个View的xib文件 ? xib 3 设置xib对应的class进行绑定 ?...xib class 4 在FirstTypeView.swift 中实现一个类方法,方便我们外部用xib来初始化FirstTypeView import UIKit class FirstTypeView...好,现在又有一个类SecondTypeView,也是要求使用xib来初始化view。这时我们就会想,一样的加载xib的方法,那我们就把它抽取出来放到父类就可以了。...面向协议开发 将BaseView删除,FirstTypeView和SecondTypeView改回继承于UIView 1 新建一个Swift文件 Nibloadable.swift ?

61130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    自定义View

    自定义View 通过纯代码自定义控件 继承自系统自带的控件,写一个属于自己的控件 在 .h 文件中声明模型对象 @class@property(nonatomic,strong)Shop *shop;...目的:封装控件内部的细节,不让外界关心 步骤 新建一个继承UIView的类 在initWithFrame:方法中添加子控件 当控件第一次创建或者通过 init 和initWithFrame...创建都会调用 initWithFrame方法 但是通过Xib创建且不通过 init 或 initWithFrame 而创建则不会调用 initWithFrame方法 如果控件通过Xib,storyboard...自定义控件 新建一个继承UIView的类 +(instancetype)photoViewWithPhoto:(Photo *)photo { SYLView *sylView = [[[NSBundle...文件(xib的文件名最好跟控件类名一样) 添加子控件、设置子控件属性 修改最外面那个控件的class为控件类名 将子控件进行连线 提供模型属性,重写模型的set方法 在set方法中给子控件设置数据

    73560

    关于IB_DESIGNABLE IBInspectable的那些需要注意的事

    这两个关键字是用在我们自定义View上的,目前暂时只能用在UIView的子类中所以系统自带的原生的那些控件使用这个关键字都没有效果。...我们通过@IBDesignable告诉Interface Builder这个类可以实时渲染到界面中,无论我们drawRect里面多么复杂,自定义有多复杂,Xib / Storyboard都可以把它编译出来...但是这个类必须是UIView或者NSView的子类。通过@IBInspectable可以定义动态属性,即可在Attributes inspector面板中可视化修改属性值。...如果我们现在自定义View的时候也是相同做法,创建完Xib文件之后,File‘s owner关联好了之后。然后在Custom Class里面填上了我们自定义的类之后,这个时候就错了!...根据上面的分析,我们找到崩溃的原因是无限递归,这里又必须要调用initWithCoder,我们的唯一办法就是把class改成父类的class,即UIView,这时候一切就好了,Xib/Storyboard

    1.6K30

    iOS从Xib中设置样式

    项目中找类 下面这个是节约时间的大功臣:command + shift + o(字母O),在文件数目庞大的工程里效果尤为显著,可以让你在茫茫”类”海中找到你的那个它....添加第三方字体 把字体ttf文件像普通文件加入到项目中,在xib或storyboard中就可以直接使用新字体了 属性设置 但是很多属性的设置 在xib中是不能完全自定义的,作为一个喜欢用xib这种方式的码客来说...,当然能最大限度的使用xib可自定义的属性当然是极好的,下面就说一下一些不常用的从xib中可设置的属性 这些属性的设置在右面设置菜单的第三个选项卡的User Defined Runtime Attributes...Border宽度和颜色 宽度好设置 Key Path Type Value layer.borderWidth Number 1 layer.borderUIColor Color 选择对应的色值 添加如下类...添加扩展 或 继承 添加IBInspectable的属性 既可以图形化设置某些属性 这样在右侧的第四个选项卡中神奇的出现了自定义的设置项 OC下的实现方式(扩展) UIView+Border&CornerRadius.h

    2.4K20

    iOS 关于Interface Building 的一些小技巧

    这时候就会报,上文所说的错误,修改一个优先级即可,我们想让Label1拉伸,所有将Label2的抗拉伸优先级调高成252,同理你可以将Label1调成249。 ?...有时候我们想在XIb里直观修改Xib属性,但是Xcode并不全部提供属性修改,可以通过Keypath修改,但是键入太麻烦容易出错,所以可以通过IBInspectable添加自定义属性。...didSet{ self.layer.cornerRadius = myRaduis } } } # 视图复用 1.自定义Xib View复用 Xcode...(coder: NSCoder)初始化方法中,添加xib视图。 import UIKit class SbView: UIView { required init?...# StoryBoard  1.Segue Segue是一个很简单对象类,继承于NSObject。目的也很简单,主要是Sb VC之间跳转关系的纽带。

    1.8K31

    MyLayout和XIB或SB的混合使用方法

    因为MyLayout中的各种布局视图类其实都是从UIView派生的,因此MyLayout是完全可以和XIB以及SB混合使用的。...取消对AutoLayout的支持 第二步就是将视图控制器中的根视图的类名转化为对应的布局视图类: ?...根视图的类名转换 第三步将类名转换后您可以切换到Show the attributes inspector 标签中进行布局视图特有属性的设置: ?...既然我们可以把根视图转化为一个布局视图类,那么我相信您可以举一反三了。我们只要直接在根布局视图中,先添加一个UIView视图,然后把类名改为对应想要使用的布局视图就可以了。...布局套布局 上图中我将中间的视图的UIView类改为了MyLinearLayout。并设置了orientation属性为1也就是水平线性布局方向,同时设置了水平线性布局的四周的边界为10。

    88440

    《iOS UI 开发捷径 利用 Interface Builder 高效、优雅地开发 UI》 读书笔记第1章 Interface Bundle 概要第2章 使用 Interface Builder第3

    关联 xib 文件与源文件 关联 xib 文件与 UIView 子类的源文件 新建一个空的xib文件,拖一个UIView上去 新建一个继承自UIView的源文件 选中xib文件里的View,把class...mvc 理解 File's Owner 关联 xib 文件与 UIViewController 子类的源文件 自定义一个 VC 的 View 的两种方法 在 IB 文件中选中 VC 所在的 View,在...Show the Identity inspector 中设置 Class 标签的值为自定义的 View 的类名。...既可以与 UIView 关联,也可以与 UIViewController 关联,也可以同时关联 UIView 与 UIViewController 使用 xib 通过 Bundle 方式加载 通过...将一些能用需求或交互模块化在对应的 Object 里。将需求或交互与 VC 解耦。

    2.5K80

    【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    界面 所用到的 UI 控件实例; -- 工作流程 : 开发者将 UI 控件 拖入 xib 文件, app 运行时会加载 xib 文件, 并为每个控件都创建对象, Objects 列表区可以看到所有的...自定义 UI 控件 (1) 自定义组件简介 自定义组件简介 :  -- UIView 基类 : 所有的 UI 控件都继承了 UIView 基类, UI 组件在 UIView 提供的空白区域上绘制具体的细节...; -- 适用情况 : 在 IOS 系统提供的组件不满足需求时, 就需要自定义组件; (2) UIView 基类常用方法 UIView 基类常用方法简介 :  -- "initWithFrame :"..., 使用 command + option + 3 打开身份检查器, 由身份检查器上可以看到 其 Custom Class 属性为 UIView, 因此该界面的根控件时 UIView; -- 创建自定义类...Main.storyboard 中 : 在 Custom Class 属性中, 输入自定义类, 然后点击回车, 默认的 View 就会变成我们设置的自定义类; -- 演示效果 :  六.

    5K30

    iOS开发系列——Storyboard

    用Interface Builder编辑的文件在iOS5之前是一个“.xib”文件,从IOS5开始进行了改进,使用“.storyboard”文件进行设计。...此时可以看到一个Interface Builder界面设计器出现在我们眼前: a.png 在这个界面中整个核心就是右侧视图控制器ViewController,在ViewController中有一个视图UIView...b.png 要实现这个登录,那么接下来就是事件和属性绑定的问题,大家应该可以猜到登录的逻辑代码肯定在ViewController.m中编写,那么storyboard文件是如何关联到这个类的呢?...如果我们在storyboard界面选中ViewController在Xcode右侧切换到Identity Inspector视图就会发现里面当前设置的是ViewController类,通过这个设置Main.storyboard...f.gif 4.与方法3类似,不再截图,只是通过View Control Scene中的控件右键来关联,关联后属性或方法前的空心圆变成实心表示已经关联到具体控件。

    3.4K40

    图片浏览器-内存问题4 MVC简单介绍和类前缀5 应用管理-两种加载

    4 MVC简单介绍和类前缀 模型 : 数据 视图 : 负责显示 控制器 : 处理逻辑,如跳转界面 类前缀苹果推荐使用三个或三个以上字母,防止重名 5 应用管理-两种加载xib的方式 从 NSBundle...加载XIB,只需要在第一个参数传入 XIB 的文件名,注意:没有扩展名 方法1,iOS 3.0 的方法 UIView *appView = [[NSBundle mainBundle] loadNibNamed...UIView *appView = [nib instantiateWithOwner:nil options:nil].lastObject; 6-应用管理-管理XIB的类 管理xib的类一般做两个事件...: UIView // 定义一个属性用来接收数据 @property (nonatomic, strong) HMApp *app; // 创建appView + (instancetype)...appView; @end 在自定义View中,新建类方法返回自己的实例,然后加载xib.

    87130

    iOS-控制器View的创建和生命周期

    首先判断下有没有指定storyboard或者xib,如果指定,就会加载它们描述的控制器的view,如果没有指定,创建一个空的view。...(1).判断下有没有指定nibName,如果指定了,就会去加载指定的xib (2).如果没有指定,就会判断下有没有跟控制器类名同名的xib,有,就会去加载 (3).判断下有没有跟控制器类名同名的xib...,但是后缀不带Controller的xib,如果有,就会去加载 (4).如果没有任何xib描述控制器的view,就不会加载xib。...ViewController.m import "ViewController.h" @interface ViewController () @end @implementation ViewController // 自定义控制器的...view (void)loadView { NSLog(@"%s",func); UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen

    1.4K60

    编码篇-iOS开发中的奇巧小伎

    设置UIView的边框、圆角 46、将一个xib添加到另外一个xib上 47、处理字符串,使其首字母大写 48、获取字符串中的数字 49、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索...或者这个类的子类。...isMemberOfClass 更加精准,它只能判断这个对象是否是某一个类的实例(不能判断子类) 11.Label字体大小 label.font.pointSize 12.为UIView某个角添加圆角...image 46、将一个xib添加到另外一个xib上 // 假设你的自定义view名字为CustomView,你需要在CustomView.m中重写 `- (instancetype)initWithCoder...将一个xib添加到另外一个xib上 47、处理字符串,使其首字母大写 NSString *str = @"abcdefghijklmn"; NSString *resultStr; if (str &&

    5.4K10

    iOS 面试策略之系统框架-UIKit

    本节将从用户界面聊起,回答开发中常见的布局和交互问题;之后将重点集中在动画渲染上,最后的问答题将集中在 iPad 的多屏开发上。...UI 控件和基本布局 1.要在 UIView 上定义一个 Label有 哪几种方式? 关键词:#storyboard #xib #Frame #Auto Layout 这道题本身问法十分模糊。...layoutSubviews 是用来自定义视图尺寸调整的。它是系统自动调用的,开发者不能手动调用。我们能做的就是重写该方法,让系统在尺寸调整时能按照希望的效果去进行布局。...方法里面的 NSItemProvider 简单来说就是用来在 Drag and Drop,或者 Extension app 和 Host app 之间传输数据的类。...UIDragItem 则是像对 NSItemProvider 的进一步封装,除了包含传输数据外,还可以自定义一些数据。 实现完该方法后,图片就可以从 dragImageView 里拖动出来了。

    1.5K20
    领券