Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS-关于加载xib

iOS-关于加载xib

作者头像
xy_ss
发布于 2023-11-22 01:06:35
发布于 2023-11-22 01:06:35
29910
代码可运行
举报
文章被收录于专栏:浮躁的喧嚣浮躁的喧嚣
运行总次数:0
代码可运行

关于xib或storyboard

  • 共同点 都用来描述软件界面 都用interface builder工具来编辑 本质都是转换成代码去创建控件
  • 不同点 xib是轻量级的,用来描述局部UI界面 storyboard是重量级的,用来描述整个软件的多个界面,并且能够展示多个界面的跳转关系

加载xib

xib文件在编译的后会变成nib文件

xib文件.png

  • 第一种加载方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSArray * xibArray = [[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil] ;
return xibArray[0];
  • 第二种加载方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UINib *nib = [UINib nibWithNibName:NSStringFromClass(self) bundle:nil];
NSArray *xibArray = [nib instantiateWithOwner:nil options:nil];
return xibArray[0];

xibArray中log打印

log打印

控制器加载xib

  1. 首先需要对xib文件进行一些处理,打开xib文件
  2. 点击"File‘s Owner",设置Class为xxxViewControler
  3. 右键"Files‘s Owner", 里面有个默认的IBOutlet变量view, 看一下后面有没有做关联,如果没有就拉到下面的View和视图做个关联

点击"File‘s Owner",设置Class为xxxViewControler

Files‘s Owner与View做关联

  • 第一种加载方式,传入指定的xib(如CustomViewController)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CustomViewController *custom = [[CustomViewController alloc]initWithNibName:@"CustomViewController" bundle:nil];
  • 第二种加载方式,不指定xib
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CustomViewController *custom = [[CustomViewController alloc]initWithNibName:nil bundle:nil];

第一步:寻找有没有和控制器类名同名的xib,如果有就去加载(XXViewController.xib)

控制器类名同名的xib

第二步:寻找有没有和控制器类名同名但是不带Controller的xib,如果有就去加载(XXView.xib)

和控制器类名同名但是不带Controller的xib

第三步:如果没有找到合适的xib,就会创建一个View(白色View,为系统自己创建的)

xib自定义控件与代码自定义的区别

这是自定义的一个View,我们通过不同的初始化方式去判断它的执行方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "CustomViw.h"
@implementation CustomViw

- (instancetype)init
{
    self = [super init];
    if (self) {
        NSLog(@"%s",__func__);
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        NSLog(@"%s",__func__);
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    if (self = [super initWithCoder:aDecoder]) {
    }
    NSLog(@"%s",__func__);
    return self;
}

- (void)awakeFromNib{
    [super awakeFromNib];
    NSLog(@"%s",__func__);
}
@end
  • 通过init方法初始化自定义控件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    CustomViw *customView = [[CustomViw alloc] init];
}
@end

log打印

通过init方法初始化自定义控件log打印

  • 通过加载xib方法初始化自定义控件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    CustomViw *customView = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([CustomViw class]) owner:nil options:nil] lastObject];
}
@end

log打印(打印三次是因为CustomViw的xib文件里有三个View)

通过加载xib方法初始化自定义控件log打印

代码实验结论: 通过代码初始化自定义控件是不会自动加载xib的,它会执行initWithFrameinit 通过加载xib初始化自定义控件,仅仅执行 initWithCoderawakeFromNib,如果要通过代码修改xib的内容,一般建议放在awakeFromNib方法内

控件封装

一般封装一个控件,为了让开发者方便使用,通常会在自定义的控件中编写俩个方法初始化方法,这样不管是通过init还是加载xib都可以实现相同的效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "CustomViw.h"
@implementation CustomViw

- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        [self setup];
    }
    return self;
}

- (void)awakeFromNib{
    [super awakeFromNib];
    [self setup];
}

- (void)setup{
    [self setBackgroundColor:[UIColor redColor]];
}
@end
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
大佬有没有遇到过,videoView 上方的其他元素黑色,显示不出的情况。上方元素放到videoView下方就是好的。
大佬有没有遇到过,videoView 上方的其他元素黑色,显示不出的情况。上方元素放到videoView下方就是好的。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Android VideoView播放视频
起初播放本地视频也是如此,但后来发现是因为权限的原因,所以需要在AndroidManifest.xml中加入
SingYi
2022/07/13
3.7K0
Android VideoView播放视频
带着问题写React Native原生控件--Android视频直播控件
最近在做的采用React Native项目有一个需求,视频直播与直播流播放同一个布局中,带着问题去思考如何实现,能更容易找到问题关键点,下面分析这个控件解决方法: 现在条件:视频播放控件(开源的ijkplayer),直播控件(自定义控件继承自TextureView与SurfaceView) 1.两种控件切换方式? 讲到切换方式,那应该是从一个布局切换到另一个布局,那如何进行布局,可以是两种布局:嵌套布局(直播控件包括播放控件),单独布局(先移除容器的控件后添加所需控件),采用第二种方式进行实现。 2.如何实
用户1148881
2018/01/15
5.4K0
带着问题写React Native原生控件--Android视频直播控件
React native和原生之间的通信
RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: 1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript。 2)使用Promise来实现。 3)原生模块向JavaScript发送事件。 关于使用回调,这是最简单的一种通信,这里可以看看官网的实现,今天要讲的是滴三种由原生模块向JavaScript发送事件。 (1)首先,你需要定义一个发送事件的方法。如下所示: /*原生模块可以在没有被调用的情况下往JavaScript发送事
xiangzhihong
2018/02/05
4.9K1
React native和原生之间的通信
Android VideoView 视频播放完成例子(进度条,播放时间,暂停,拖动)
中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 <netkiller@msn.com>
netkiller
2018/11/09
14.9K0
React Native 与 OC 之间通信那些事儿
作者:朱灵子 React Native用IOS自带的JavaScriptCore作为JS的解析引擎,普通的JS-OC通信就是React Native在OC定义一个模块方法,JS可以直接调用这个模块方法
腾讯IVWEB团队
2017/05/02
2K0
Android多媒体之视频播放器(基于MediaPlayer)
获取帧.png 基本上也就这么多了,最后讲一下视频封面帧图片的获取:数了一下这帧大概在15秒 测试了一下秒数越大,获取图片的速度越慢,也就是越卡,所以还是给0吧 如果在Adapter里实时加载会很卡,最好查询的时候就把bitmap放到实体类里,由于封面图不要很大 别把原图给放进去了,小心直接OOM。Bitmap的操作本文就不赘述了。
张风捷特烈
2019/03/15
5.6K0
Android多媒体之视频播放器(基于MediaPlayer)
React Native与Android 原生通信
我们用React Native 做混合开发的时候免不了要原生和React Native 进行通信交互,这篇文章就是分享原生模块与JS传递数据的几种方式。
HelloJack
2018/08/28
2.5K0
React Native调用Android相机图库
概述 在很多的React Native开发中,我们需要调用原生的api实现调用相机和图库的功能,网上用的最多的开源库如:react-native-image-picker。关于react-native-image-picker的用法大家请看相关的文档。我们今天手动实现一份。 调用Android图库相机 创建项目 执行命令 : react-native init HeadImage 创建一个名为HeadImage的工程,可以使用命令先运行下Demo项目。 然后照一张图片,放到放到工程的 HeadImage\A
xiangzhihong
2018/01/26
1.8K0
React Native调用原生组件
在React Native开发过程中,有时候我们可能需要访问平台的API,但react Native还没有相应的实现,或者是React Native还不支持一些原生的属性,我们需要调用原生代码来实现,或者是我们需要复用一些原来的Java代码,这个时候我们就需要创建一个原生模块来自己实现对我们需要功能的封装。 相关文档可以参照官方的介绍。 #实例 下面我们就通过实现一个自定义模块,来熟悉编写原生模块需要用的一些知识。该模块主要实现调用一些Android原生的功能,比如弹Toast,启动Activity等。
xiangzhihong
2018/01/26
1.8K0
实习杂记(22):仿照VideoView+MediaPlayerController做视频
主要是抽取出来,有些方法是hide,有些类是  internal层的,无法使用,所以需要自己去想办法弄,
wust小吴
2019/07/08
9230
Android TV 开发之 TV视频播放器
最近公司又给了一个新任务,说要做电视机顶盒开发,这个机顶盒开发之前也没有接触过啊,没经验,这使我走了很多坑,写这个日志就是帮助和自己一样的新手开发代码顺利一些,少走弯路,如果你是有经验的,请无视我的废话和文章,因为我将从创建项目开始写这篇日志,这意味着会比较无聊,你要有心理准备,当然如果你是一个新手的话,恰好最近又要做AndroidTV的开发,那么你就来对地方了,好了,话不多说了,进入正题吧。
晨曦_LLW
2020/09/25
7K5
Android开发笔记(一百二十五)自定义视频播放器
在Android中播放视频的方式有两种: 1、使用MediaPlayer结合SurfaceView进行播放。其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置播放参数、并控制视频的播放操作;该方式的具体说明参见《Android开发笔记(五十七)录像录音与播放》。 该方式的好处是灵活性强,可随意定制。缺点是编码复杂,连开始/暂停的按钮都要自己实现。 2、使用VideoView结合MediaController进行播放。VideoView其实是从SurfaceView扩展而来,并在内部集成了MediaPlayer,从而实现视频画面与视频操作的统一管理;而MediaController则是一个简单的播放控制条,它实现了基本的控制按钮,如开始/暂停按钮、上一个/下一个按钮、快进/快退按钮,以及进度条等控件;把VideoView与MediaController关联起来,便是一个类似于Window Media Player的精简版播放器。 该方式的好处是简单易用,编码容易。缺点是可定制差,难以扩展,想给按钮换个样式都不行。 但是不积跬步无以至千里,如果我们要定制一个好用好看的播放器,还是得先把笨拙的VideoView与MediaController搞清楚才行。就像穷国一开始没有汽车工业,那只能从研究拖拉机开始,没办法一蹴而就强行大跃进呀。
aqi00
2019/01/18
2.9K0
React Native之React速学教程(下)
React Native之React速学教程(下) 本文出自《React Native学习笔记》系列文章。 React Native是基于React的,在开发React Native过程中少不了的需要用到React方面的知识。虽然官方也有相应的Document,但篇幅比较多,学起来比较枯燥。 通过《React Native之React速学教程》你可以对React有更系统和更深入的认识。为了方便大家学习,我将《React Native之React速学教程》分为上、中、下三篇,大家可以根据需要进行阅读学习。 概
CrazyCodeBoy
2018/05/07
2.9K0
React Native调用原生UI组件
在React Native 中,其已经将几个常用的原生组件进行了封装,但是并不是所有系统的原始组件都被封装了,因此有时候我们不得不自己动手封装一下,从而能够使用那些React Native没有为我们封装的原生组件。为了方便讲解,我们选择第一个第三方库kenburnsview来讲解,kenburnsview是一个可以让图片在在页面移动或者放大缩小的库。 Android原生组件封装 1,继承SimpleViewManager,返回UI组件实例 首先,需要继承 SimpleViewManager 这个泛型类,
xiangzhihong
2018/02/06
1.6K0
05.视频播放器内核切换封装
05.视频播放器内核切换封装 目录介绍 01.视频播放器内核封装需求 02.播放器内核架构图 03.如何兼容不同内核播放器 04.看一下ijk的内核实现类 05.看一下exo的内核实现类 06.如何创建不同内核播放器 07.看一下工厂类实现代码 08.后期如何添加新的内核 00.视频播放器通用框架 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换 对于视图状态切换和后期维护拓展,避免功能和业务出现耦合。比如需要
杨充
2020/10/16
2.4K0
Android MediaPlayer 播放音频
主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。
AnRFDev
2021/02/01
2.4K0
音频开发ijkplayer小结 android
最近接触到一些音频开发的操作和一个音频开发的三方库: github:https://github.com/Bilibili/ijkplayer。 有人会问为什么使用三方库:最直接原因当然是因为系统的MediaPlayer支持格式不多或者是版本限制。具体只支持格式: http://developer.android.com/intl/zh-cn/guide/appendix/media-formats.html http://blog.csdn.net/ddna/article/details/517
用户1127566
2018/06/01
1.8K0
相关推荐
Android VideoView播放视频
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验