Swift下自定义xib添加到Storyboard

原创 2016年06月13日 13:48:07

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/51657154

我们使用Storyboard布局的时候,很多子单元页面会独立到xib布局中,那么这个xib如何添加到storyboard中呢?下面我们看看Swift下怎么操作。


一、准备工作

  1. 新建Xcode工程
  2. 新建一个UIView:MyView.swift 集成自UIView
  3. 新建一个UIView的xib布局文件:MyView.xib
    这个是我MyView.xib内容:
    这里写图片描述

二、互相关联MyView.xib与MyView.swift

xib关联到MyView.swift

  1. 设置MyView.xib的File’s Owner 的Custom Class为MyView
  2. 注意:不要修改MyView.xib下View的Custom Class,保存其为默认的UIView。
    这里写图片描述

MyView.swift设置

  1. 将MyView.xib下的View拖拽到MyView.swift中关联IBOutlet属性变量:view
    @IBOutlet var view: UIView!
  1. 添加初始化代码在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

  1. 拖拽一个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")
    }
}

效果图:
这里写图片描述

版权声明:猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN http://blog.csdn.net/cocos2der

相关文章推荐

swift用xib 自定义View

swift用xib 自定义View

iOS swift - 通过xib 自定义View

新建Swift文件和xib文件 Swift 文件 xib文件 (名字与Swift文件相同) Swift文件中的代码import UIKit class LXFView: UIView { ...

swift中的xib使用

oc中的xib使用大家应该都烂熟于心了,但是swift中的xib的使用可能大家还不是很清楚。在下使用时做了一些总结,但愿可以帮到大家: 1.建立一个小哦xib文件,这一步想必很简单就不啰嗦了:2.建...

iOS swift使用xib绘制UIView

目标:用xib绘制一个UIView,在某个ViewController中调用。 三个文件:ViewController.swift    DemoView.swift     DemoView.xi...
  • worldzhy
  • worldzhy
  • 2015年07月22日 23:07
  • 13149

XIB或者storyboard中嵌入自定义view(xib)的方法

转载于:StoryBoard导入Xib的自定义UIView 经常使用Xib制作自定义的UITableViewCell, 有两个神器我爱不释手, 一个是Xib另外一个是Autolayout. 于是...

swift开发笔记16 - 使用xib自定义一个控件(复合控件)

用xib自定义复合控件

swift3 用协议实现从XIB加载view

如我们实现了一个类TGEmoticonInputV,这个类是UIView,同时对应的XIB(同名)也已经创建 以前我们要加载这个View的做法是 let v = Bundle.main.loadN...
  • callzjy
  • callzjy
  • 2017年03月25日 21:50
  • 2235

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift下自定义xib添加到Storyboard
举报原因:
原因补充:

(最多只允许输入30个字)