Swift下自定义xib添加到Storyboard
2016-06-13 13:48
477 查看
猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/51657154
我们使用Storyboard布局的时候,很多子单元页面会独立到xib布局中,那么这个xib如何添加到storyboard中呢?下面我们看看Swift下怎么操作。
新建一个UIView:MyView.swift 集成自UIView
新建一个UIView的xib布局文件:MyView.xib
这个是我MyView.xib内容:
注意:不要修改MyView.xib下View的Custom Class,保存其为默认的UIView。
添加初始化代码在MyView.swift中:
OK, 现在运行Xcode,是不是看到app运行后,自己的xib已经出来了。
1. 添加@IBDesignable属性
2. 添加Main.storyboard下xib初始化方法
3. 注意:
- Xcode非运行状态下storyboard加载xib使用NSBundle.mainBundle().loadNibNamed会出现找不到xib文件的错误。
- xib加载后,需要设置其frame大小,不然frame会是xib中的大小。
- 每次选中storyboard,都会自动Build一次来刷新其中xib视图,如果过程中出现错误信息可以直接Xcode下查看,如果出现Crash错误,Xcode下不会显示,此时去查看下面的crash文件来帮助你定位问题。
下面是完整MyView.swift
效果图:
原文地址: http://blog.csdn.net/cocos2der/article/details/51657154
我们使用Storyboard布局的时候,很多子单元页面会独立到xib布局中,那么这个xib如何添加到storyboard中呢?下面我们看看Swift下怎么操作。
一、准备工作
新建Xcode工程新建一个UIView:MyView.swift 集成自UIView
新建一个UIView的xib布局文件:MyView.xib
这个是我MyView.xib内容:
二、互相关联MyView.xib与MyView.swift
xib关联到MyView.swift
设置MyView.xib的File’s Owner 的Custom Class为MyView注意:不要修改MyView.xib下View的Custom Class,保存其为默认的UIView。
MyView.swift设置
将MyView.xib下的View拖拽到MyView.swift中关联IBOutlet属性变量:view@IBOutlet var view: UIView!
添加初始化代码在MyView.swift中:
override init(frame: CGRect) { super.init(frame: frame) initViewFromNib() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initViewFromNib() } private func initViewFromNib(){ // 需要这句代码,不能直接写UINib(nibName: "MyView", bundle: nil),不然不能在storyboard中显示 let bundle = Bundle(for: type(of: self)) let nib = UINib(nibName: "MyView", bundle: bundle) self.view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView self.view.frame = bounds self.addSubview(view) // Do any additional setup after loading the view. }
三、添加MyView.xib到Main.storyboard
拖拽一个UIView到Main.storyboard中,设置该UIView的Custom Class为MyView, 添加一下布局约束。OK, 现在运行Xcode,是不是看到app运行后,自己的xib已经出来了。
四、让Xcode下Main.storyboard中预览xib
细心的朋友注意到了,Main.storyboard中没有刷新xib视图,只能运行后才能看到,下面我们让Main.storyboard中也能预览xib。1. 添加@IBDesignable属性
2. 添加Main.storyboard下xib初始化方法
3. 注意:
- Xcode非运行状态下storyboard加载xib使用NSBundle.mainBundle().loadNibNamed会出现找不到xib文件的错误。
- xib加载后,需要设置其frame大小,不然frame会是xib中的大小。
- 每次选中storyboard,都会自动Build一次来刷新其中xib视图,如果过程中出现错误信息可以直接Xcode下查看,如果出现Crash错误,Xcode下不会显示,此时去查看下面的crash文件来帮助你定位问题。
~/Library/Logs/DiagnosticReports/IBDesignablesxxxxxxx.crash
下面是完整MyView.swift
import UIKit @IBDesignable class MyView: UIView { @IBOutlet var view: UIView! override init(frame: CGRect) { super.init(frame: frame) initViewFromNib() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initViewFromNib() } private func initViewFromNib(){ // 需要这句代码,不能直接写UINib(nibName: "MyView", bundle: nil),不然不能在storyboard中显示 let bundle = Bundle(for: type(of: self)) let nib = UINib(nibName: "MyView", bundle: bundle) self.view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView self.view.frame = bounds self.addSubview(view) // Do any additional setup after loading the view. } @IBAction func tapped(sender: AnyObject) { print("tappd") } }
效果图:
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- jQuery选择器及jquery案例详解(必看)
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift自定义iOS中的TabBarController并为其添加动画
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- C语言程序设计50例(经典收藏)
- 简单分析Swift语言的一些基本特征
- 使用 Swift 语言编写 Android 应用入门
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- javascript的理解及经典案例分析
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- 教你如何解决XCODE升级后插件不能用问题
- Swift实现iOS应用中短信验证码倒计时功能的实例分享
- 加载带有手势识别器的XIB文件需注意哪些问题
- iOS应用开发中StoryBoard搭建UI界面的基本使用讲解