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使用

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

swift3 用协议实现从XIB加载view

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

iOS swift使用xib绘制UIView

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

swift用xib 自定义View

swift用xib 自定义View
  • yeshennet
  • yeshennet
  • 2016年06月03日 11:08
  • 5237

iOS swift - 通过xib 自定义View

新建Swift文件和xib文件 Swift 文件 xib文件 (名字与Swift文件相同) Swift文件中的代码import UIKit class LXFView: UIView { ...
  • lincsdnnet
  • lincsdnnet
  • 2016年12月09日 09:31
  • 1350

swift 纯代码、xib自定义控件

swift 纯代码、xib自定义控件
  • Riven_wn
  • Riven_wn
  • 2017年06月06日 14:38
  • 777

swift可视化自定义控件

swift利用xib实现自定义视图(控件) 自定义视图最直接的方法是使用代码实现,相信也有喜欢可视化实现的懒人,最主要的是这种方式的自定义视图可以引用到IB中使用,这里是swift3创建自定义子控件的...
  • qq_14920635
  • qq_14920635
  • 2017年06月24日 22:26
  • 551

ios使用xib自定义view, 在storyboard使用。

1.新建object-c类,从UIView继承 2.新建一个同名xib文件,修改File's Owner的Custom Class为新建的自定义view类名(注意,视图类名不能填,只匹配File...
  • shenyingqiang
  • shenyingqiang
  • 2015年10月25日 17:33
  • 506

IOS中 xib自定义View在storyboard中的使用

最近遇到一个这样的问题,在应用当中有多个ViewController中包含相同布局的SubView。于是就想把这样的View 提取出来做一个自定义的View,这样就可以避免在storyboard中反...
  • WLQ861025
  • WLQ861025
  • 2016年02月24日 08:58
  • 4421

swift 自定义控件在StoryBoard(xib)里使用的属性

有时候我们在StoryBoard里用拖拽方法创建属性的时候,总会有一些常用的属性没有提供可视化操作,所以我们必须在连接类中用代码去实现,虽然也比较简单,但是这样重复的操作大大的增加了开发时间,如果能在...
  • ITMan_iOS
  • ITMan_iOS
  • 2015年10月17日 13:44
  • 1110
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift下自定义xib添加到Storyboard
举报原因:
原因补充:

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