xib中嵌套swift
2015-05-28 11:00:23 sjsssd 阅读数 721

在OC时代,使用xib来管理界面很简单,但是swift下使用xib有点小复杂。

由于项目需要,有一个view需要重复使用,storyboard无法满足需求,使用xib更为简便。总结一下swift中使用xib的注意事项:

1.新建cocoa touch class(同时生成xib),xib的file‘s owner设置成对应controller(第一步和OC相同)

2.由于swift不会自动override父类的init方法,所以如果只是按照第一步来做得话,会报错,因此,我们必须手动添加init方法:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }

required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

以上两个方法必须重载,至于默认构造函数最好也重载(使用起来更加方便):

override init() {
        var nibName = String?("你的xib文件名字(不用加后缀)")
        super.init(nibName: nibName, bundle: nil)
    }


2016-05-31 14:51:22 heipingguowenkong 阅读数 4365

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

2.建立一个关联文件(例如一个自定义view的xib,注意文件名要和xib的文件名相同):关联文件

3.把xib文件的类别设为关联文件的名称:改类别

4.把xib中需要关联的子控件脱线到关联的文件中建立关联:关联子控件

5.在关联的类文件中重写以下两个方法,一个完整的xib文件就建好了:把加载的方法在重写的init方法中调用

6.好了此时就可以在别的文件中调用这个xib了:这里就可以调用了

希望对大家有所帮助!多谢大家支持

2019-03-09 16:14:00 weixin_34050519 阅读数 4
1376750-8986a6f4720a7991.jpeg
timg (1).jpeg

这篇文章就介绍用xib去完成界面布局吧。

一个界面如果是很简单的布局格式(例如,登录界面,修改密码,昵称,界面),我们可以采用控制器xib的结构进行布局。

1376750-873ae46c234aa6df.png
0423C15C-8FE7-4268-8AB5-1A4798DEF52C.png

这种我们可以在创建Controller的时候勾选创建xib文件,这样我们首先需要在xib文件中添加组件,然后添加布局约束,至于布局约束和关联组件到控制器中,这儿就不做介绍了。

主要在弄好了视图后,怎么通过代码显示在界面上。

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        
        super.init(nibName: "YourController", bundle: Bundle.main)
    }
    
    required init?(coder aDecoder: NSCoder) {
        
        fatalError("init(coder:) has not been implemented")
    }

当然如果一个界面中有复杂的也有简单的界面时,而你想把其中的一部分界面用xib的方式,那么:

    class func initialization() -> YourView {
        
        let view = Bundle.main.loadNibNamed("YourView", owner: nil, options: nil)?.first as! YourView
        return view
    }
    
    override func awakeFromNib() {
        
        super.awakeFromNib()
        setUp()
    }

接着我们在控制器中用法是:

    private lazy var headerView : YourView = {
        () -> YourView in
        
        let view = YourView.initialization()
        return view
    }()

    override func viewDidLayoutSubviews() {
        
        super.viewDidLayoutSubviews()        
        headerView.size = CGSize.init(width: view.width, height: RS_SCALE_LENGTH(value: 310))
    }

这样只需要把这个视图添加上去就可以了。

2016-09-22 15:59:13 weixin_34379433 阅读数 9

文章写于2016年9月底,Xcode 8,swift 3.0
真是蛋疼,折腾了很长时间,试了网上很多教程,结果又莫名的可以了!

1.方法和OC中一样

将一个xib文件和一个ViewController类进行关联的几步操作:

  1. command + n 创建一个新的文件,选择 User Interface - View 或者 Empty。

  2. 如果选择的是 Empty 就需要在xib文件中,自己创建一个View。

  3. 将xib文件和ViewController类进行绑定,点击左上角的 File's Owner,在右边的选项的中的第三个选项卡的第一个栏目中写入需要绑定的类名。

  4. 将xib中的view和self.view进行关联,按住control 从File's Owner连线到view。

或者
 在创建ViewController文件时,可以选择直接创建一个关联完毕的xib文件。默认已经帮你完成上面几步。
图片描述
注: 当一个视图控制器类,有相关联的xib文件时(文件名相同),在执行内部loadView方法时,会自动的去读取xib,所以这样就能实现了。

说明:以上方法和OC中完全一样,在swift项目中也一样可以实现。但是我第一次弄的时候莫名的出现问题,现在测试可以使用。网上的内容说还需要以下部分才能实现,个人测试以下的内容也需要在xib文件绑定和关联之后才可用。(个人觉得没必要,特定环境下需要以下内容)

2.在该类中复写 init

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

convenience init() {
    var nibNameOrNil = String?("ViewController")//这里根据自己xib名
    
    //考虑到xib文件可能不存在或被删,故加入判断
    if Bundle.main.path(forResource: nibNameOrNil, ofType: "xib") == nil {
        
        nibNameOrNil = nil
    }
    
    self.init(nibName: nibNameOrNil, bundle: Bundle.main)
}

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
2016-08-14 08:04:00 weixin_33786077 阅读数 25

嵌套

import UIKit

struct BlackjackCard {
    
    // 嵌套Suit 枚举
    enum Suit: Character {
        case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣︎"
    }
    
    // 嵌套Rank 枚举
    enum Rank: Int {
        case two = 2, three, four, five, six, seven, eight, nine
        case jack, queen, king, ace
        
        // 嵌套 Values 结构体
        struct Values {
            let first: Int, second: Int?
        }
        
        var values: Values {
            switch self {
            case .ace:
                return Values(first: 1, second: 11)
            case .jack, .queen, .king:
                return Values(first: 10, second: nil)
            default:
                return Values(first: self.rawValue, second: nil)
            }
        }
    }
    
    let rank: Rank, suit: Suit
    var description: String {
        var output = "suit is \(suit.rawValue),"
        output += " value is \(rank.values.first)"
        if let second = rank.values.second {
            output += " or \(second)"
        }
        
        return output
    }
}

let theAceOfSpades = BlackjackCard(rank: .ace, suit: .spades)
print("theAceOfSpades: \(theAceOfSpades.description)")


let heartsSymbol = BlackjackCard.Suit.hearts.rawValue
print(heartsSymbol)

console log 如下


1743362-fa3a2be6f4c4c026.png
嵌套类型.png

swift 创建xib项目

阅读数 8

swift用xib 自定义View

阅读数 7181

swift用xib自定义View

博文 来自: yeshennet

Swift Xib加载方式

阅读数 52

swift纯代码、xib自定义控件

博文 来自: Riven_wn
没有更多推荐了,返回首页