控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法loadView和viewDidLoad。...通过storyboard创建的控制器,或者通过xib创建的控制器的view,系统会帮我们加载控制器的view,具体内部实现可以看iOS-UIWindow详解,在此不在赘述 ViewController...(1).判断下有没有指定nibName,如果指定了,就会去加载指定的xib (2).如果没有指定,就会判断下有没有跟控制器类名同名的xib,有,就会去加载 (3).判断下有没有跟控制器类名同名的xib...,但是后缀不带Controller的xib,如果有,就会去加载 (4).如果没有任何xib描述控制器的view,就不会加载xib。...import "ViewController.h" @interface ViewController () @end @implementation ViewController // 自定义控制器的
之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。...网卡自不必说,用来和其他的计算机进行通讯的硬件,我们常说的 MAC(Medium Access Control) 地址,其实就是网卡的编号,从其被生产出来的那一刻就被确定的一个唯一编号。...那数据在协议栈中到底经历了什么?才变成了一个一个的数据包?...而我们需要知道数据包是由以下部分组成的: 各种头部信息 真实数据 而从 MTU 中减去各种头部数据的大小,剩下的就是 MSS 了,也就是实际的数据。...例如我发这篇文章时所发请求的数据长度就可能超过 MSS 。 此时就需要对数据进行拆分,按照 MSS 的长度为单位进行拆分,将拆出来的数据分别装进不同的数据包中。
之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。...网卡自不必说,用来和其他的计算机进行通讯的硬件,我们常说的 MAC(Medium Access Control) 地址,其实就是网卡的编号,从其被生产出来的那一刻就被确定的一个唯一编号。...那数据在协议栈中到底经历了什么?才变成了一个一个的数据包?...而我们需要知道数据包是由以下部分组成的: 各种头部信息 真实数据 而从 MTU 中减去各种头部数据的大小,剩下的就是 MSS 了,也就是实际的数据。...例如我发这篇文章时所发请求的数据长度就可能超过 MSS 。 过长数据包拆分 此时就需要对数据进行拆分,按照 MSS 的长度为单位进行拆分,将拆出来的数据分别装进不同的数据包中。
不同于国外,StoryBoard从面世到如今饱受国内开发者的质疑,质疑的理由很多,什么不利于多人协作啊,隐藏了UI细节啊,出问题不容易测试,降低执行效率啊等等。此文就是针对这些问题的举例和剖析。...StoryBoard 和 Xib 有什么区别?...StoryBoard 和 Xib 隐藏了UI细节,且容易导致ViewController臃肿?...从Storyboard创建竟然比纯代码更快?...StoryBoard 或 Xib上使用约束的技巧,可以参考文章《纯Swift项目-Xib | StoryBoard 设备适配技巧[2]》及 《纯Swift项目-Xib | StoryBoard 约束使用技巧
View:就是在xib文件中设计出来的那些View对象(storyboard暂时我还没去学,不敢妄下结论哈); Controller:就是各个ViewController对象; 确实很简单明了...当然,在实际开发过程中,还是遇到了一些小问题——主要是xib文件中控件、事件与代码中属性、变量或方法的连接问题。...但是,若每个子View都使用各自xib文件进行设计,那事件的连接线似乎无从接起,因为貌似无法跨xib文件进行连接。...另一个法子,也是目前我在项目中使用的法子,即是只用一个xib文件进行设计,每个子View的界面设计工作都放到ViewController对应的xib文件中来设计,这样界面事件就能轻松跟ViewController...这两者很像,但是仔细考量其实还是不一样,两种系统设计方式分别侧重不同的开发场景: 传统三层架构设计更适合Web开发,因为Web系统重在服务端数据的大量展现,数据从用户界面产生后,最终会流转、持久化到数据库中
概述 在iOS的发展历程中,IOS开发经历了三种主要流派:使用代码手写UI及布局;使用单个xib文件组织viewController或者view;使用StoryBoard来通过单个或很少的几个文件构建全部...XIB 其实IB和xib是从iOS SDK初次面世开始就是捆绑在开发者工具套装内的内容了,而到了Xcode 4之后更被直接集成到了Xcode中成为了IDE的一部分. xib设计的一大目的其实是为了良好的...MVC:一般来说,单个的xib文件对应一个ViewController,而对于一些自定义的view,往往也会使用单个xib并从main bundle进行加载的方式来载入.IB帮助完成view的创建,布局和与...StoryBoard 简单理解来说,可以把StoryBoard看做是一组viewController对应的xib,以及它们之间的转换方式的集合.在StoryBoard中不仅可以看到每个ViewController...并且可以通过 Segue 来进行 View 之间的数据传递,统一规范 View 之间跳转的代码,让逻辑更清晰。 所以我们在写布局的时候尽量预览下实际效果。 ?
那么UIWindow是如何将View显示到屏幕上的呢 这里有三个重要的对象UIScreen,UIWindow,UIView。...UIApplication代理对象,并给UIApplicaiton对象设置代理 开启主运行循环 main events loop处理事件,保持程序一直运行 加载info.plist,判断是否指定mian(xib...系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口root viewcontroller...self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 创建窗口的根控制器 // 通过xib...创建控制器 ViewController *vc = [[ViewController alloc] initWithNibName:@"VC" bundle:nil]; //vc.view.backgroundColor
* 注意: 对于可动态确定布局的部分,如tableView中的cell,直接自行从xib初始化即可,不必继承于 MCComponent. */ @interface MCComponent :...= self) { [self mcSetup: YES]; } return self; } /** * 是否从xib初始化此类....* * @param isFromXib 是否从xib或sb初始化此类. * * 注意: 无论此类是否从xib或sb初始化,组件内部都将从xib文件初始化....= self.viewController.navigationController) { [self.viewController.navigationController popViewControllerAnimated...这是与数据结合之后的效果图.只是个初稿,还需要进一步调试.也就是说,以后再写UI界面,你的注意力将可以集中在 数据与视图本身的交互处理上.
你可以从 Object Library中拖控件(右下角)到viewcontroller 中,并修改它的布局。...与使用 MainWindow.xib 的时候不同,故事板中不会包含应用程序委托。...2 使用 2.1 结合xib使用 思路: APP跳转流程在故事板中呈现,但是VC的事件处理与详细视图设计放在xib文件中。 ...如果是使用IB ,在 MainWindow.xib中会有应用程序委托的一个引用,同时你可以将顶层的ViewController 连接到应用程序委托的IBOutlet 属性。但现在使用故事板就不可能了。...3 设计原则 3.1 布局设计原则 3.1.1 一个控件的布局尽量只采用一种方式,要么是Storyboard(XIB)要么是代码 因为视图在刷新时,会直接从Storyboard中加载控件的大小
引 在iOS的开发过程中,不可避免的要设计界面,在android中有xml设置界面和直接使用java代码设置界面控件两种方式,在之前的ios开发中也是类似的有xib文件设置界面及用代码直接设置控件两种方法...,但后来又出了一种方式,就是storyboard故事板子,其实storyboard和xib文件很像,最大的不同之处在于一个xib文件对应一个ViewController视图控制器,而storyboard...对应多个,基本一个应用只需要一个storyboard就可以了,不再需要为每个控制器创建一个xib文件,从这点上来说,还是很方便的,在storyboard中查看各个界面的跳转也很方便,但之前一直使用xib...:YES completion:^{}]; } 现在运行工程,就可以点击两个按钮欢快地跳来跳去了,可以看到从Page2跳回Page1的时候,动画的方向和从Page1跳到Page2时是相反的,这才是跳回嘛...使用Segue在界面间传值: 我们在两个视图中都添加了TextField编辑输入框,这样我们可以在Page1的页面中输入数据来传递到Page2显示,同样的可以在Page2中输入数据回到Page1显示。
无法显示自定义控件从 Xib 加载的问题。...,我们把 NavigationBar绑定到 ViewController的类里面。...cornerRadius = CGFloat(newValue) } } } 解决 Xib无法显示自定义控件从 Xib加载的问题。...关于 prepareForInterfaceBuilder()方法 这个方法可以只在预览 Xib的时候起作用可以做一些 Moke数据。...DEC6484F-944D-4D00-B81E-B9A624D8A0A4 为了让 ViewController在右侧可以显示正确的界面,我们在 ViewController的右侧新增一个 NSView作为父试图
作为基本的ViewController,打开 Main.xib 将 File’s Owner的l类属性改为 Main(这样才干够将关联变量拖动到 Mian.swift )。...Main.xib 页面UI。...3、然后在Main.swift 中编写一下TableView 的数据源和代理的方法。这里我们用的是 自己定义的 Cell。...全部新建一个 Cell.xib 和 Cell.swift 并将它们关联起来,做法和上面的同样,Cell.xib UI 例如以下。...,接下来我们做一些动态数据。
现在在Xode 7中,我们默认创建一个View,是不给我们默认生成一个XIB文件,ViewController会有下面那个选项,可以选择勾上。 ?...我们这个自定义View肯定是放在了一个ViewController上面,代码创建出来或者直接拖拽到Xib / Storyboard 上。...UINibDecoderDecodeObjectForValue——[UIClassSwapper initWithCoder:]——[BottomCommentView initWithCoder:] 从NSBundle...我们在ViewController里面拖拽了一个View,并且更改它的class为我们自定义的class,那么接下来所有view的绘制都会交给我们这个自定义view的class,由这个class来管理。...initWithNibName要加载的Xib的类为我们定义的ViewController。loadNibNamed要加载的Xib的类为NSOjbect。
我们使用xib方式创建了tableView和cell以及一个viewcontroller 3 需要暴漏给外部使用h文件 好了基本的工程已经出来了,现在我们来看看怎么玩这两种形式的framework...UIImage *staticImage = [UIImage imageNamed:@"res.bundle/test.png"]; 因为此时它是游离于静态库之外,在main bundle中的我们可以采用传统的从main...bundle加载资源的方式按照名称加载(此时多了个壳,因为bundle采用路径方式查询资源,我们就按照路径拼接上资源所在的bungle即可) 2 xib加载 对于xib这个资源比较特殊,虽然是静态库但是依然被编译成为了...nib文件存放在framework中 同样App默认也是从Payload这个里去按照名称搜索,不过此时想要拿到对应的nib则需要先进入framework然后才是对应资源名称,因此可以我们就需要加载个库名称啦...其实啊,这个里面有个隐含问题:默认情况会搜素main bundle中医ViewController同名的xib,而我们的库需要加前缀才能定位,因此要手动使用加载nib的方式创建我们的Controller
Paste_Image.png 3、控制器的创建(Xid) /* 通过xib创建控制器的view 1.一定要描述xib的文件拥有者是控制器,也就是说这个xib是用来描述控制器 */ 1.通过File...Paste_Image.png 3.通过Xib 要是用控制器alloc】 initWithNibName:bundle:】 bundle传nil默认就是从[NSBundle mainBundle] ?...Paste_Image.png // 加载跟类名相同的xib // 如果描述控制器View的xib跟控制器的类名相同,就会去加载 ?...// 1.寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载(View.xib) // 2.寻找有没有跟控制器类名同名的xib,如果有就会去加载(ViewController.xib...Paste_Image.png 也就是self.window.rootViewController = ViewController,就不必设置尺寸 开发注意:不要再ViewDidLoad中打印尺寸,在
使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewcell...上 并给我们的xib一个标识 为了学习,我这里的xib和后台的class是分开建的。...我们再建一个cocoa touch class文件名称为CarCellTableViewCell继承自UITableViewCell 并把我们的xib和新建的CarCellTableViewCell建立联接...在main.storyboard上拖放一个uitableview,并在后台代码建立输出联接 1.在load事件里注册xib 2.在tableveiw的方法里得到当前的列,指定数据源。...import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
前言 云开发数据库 云开发为我们提供了一个 JSON 文档型数据库(NoSQL),并集成了增删改查等 API,操作方便,简单易懂。...并且相比传统数据库而言它具有高性能的数据库读写服务,可以直接在客户端对数据进行读写,无需关心数据库实例和环境。...from=12763 迁移说明 本篇文章从 MySQL、MongoDB 迁移到云开发数据库,其他数据库迁移也都大同小异~ 迁移大致分为以下几步?...: 从 MySQL、MongoDB 将数据库导出为 JSON 或 CSV 格式 创建一个云开发环境 到云开发数据库新建一个集合 在集合内导入 JSON 或 CSV 格式文件 Mysql迁移到云开发数据库...数据库导入 我们进入云环境后,找到数据库选项,默认有一个 tcb_hello_world 集合,可以把他删掉。
UI 控件; (4) xib 和 nib 文件 xib 和 nib 后缀文件 : -- 新旧区别 : nib 后缀是传统格式, xib 后缀是新格式; -- 默认模板 : Xcode 默认使用 xib...: 获取委托对象, 可以向其中存取数据, 可以作为 IOS 应用的通信中心, 程序组件之间通过委托对象进行数据交互; -- 处理生命周期事件 : 应用程序委托对象还处理 IOS 应用的各种生命周期事件...对象 : 该对象用于加载该对象对应的 xib 等界面设计文件; self.viewController = [[FKViewController alloc] initWithNibName:@"FKViewController..." bundle:nil]; -- 显示界面 : 让应用程序窗口显示 ViewController 对象; self.window.rootViewController = self.viewController...IOS 图标设置 IOS 图片设置 : 直接从文件目录将图片拖动到 Xcode 相应的设置中. -- 设置图标 : 在项目文件视图中, 点击 Images.xcassets, 选中左侧的 AppIcon
首先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型。...Server数据库服务器,然后选择要逆向的数据库名,比如选中“WSS_Content_80”如图所示: 单击确定即可生成物理模型图: 然后单击“Database”菜单下的Change Current...二、迁移数据内容 数据内容只能通过生成INSERT语句的方式来做。...首先使用SSMS的“生成脚本”功能(在数据库上右键,选择“任务”“生成脚本”选项),可以为SQL Server数据库中的数据生成插入脚本。...首先选择要迁移数据的表,这里我们全选所有的表: 然后单击下一步,选择将脚本保存到新的查询窗口: 单击“高级”选项,在高级选项窗口中选择“要编写脚本的数据的类型”为仅限数据: 然后“确定”再下一步下一步即可生成
看似常用的UIView,其实有很多不经常用到的方法和应该注意的机制,我是一个喜欢打破砂锅问到底的人,可是很多问题在网上搜索不到答案,大部分的博客都是转载相同的东西,所以我自己就新建 Dome,实际测试了一些数据...---- viewController的生命周期 单个viewController的生命周期 initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib...(如果用xib创建的情况下) loadView:ViewController2 viewDidLoad:ViewController2 viewWillDisappear:ViewController1...setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。...**综上两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘。
领取专属 10元无门槛券
手把手带您无忧上云