当前位置: > > > Swift - 使用xib添加新界面

Swift - 使用xib添加新界面

除了使用 storyboard 外,我们还可以使用 xib 来设计并创建页面。(本文代码已升级至Swift3)

1,下面通过一个样例来演示:
(1)点击主界面的“信息”按钮,页面切换到信息界面
(2)点击信息界面的“返回”,关闭信息界面,回到主界面


2,UIModalTransitionStyle有四种跳转方式:
(1)CoverVertical:从底部升上来的方式
(2)CrossDissolve:快速闪现
(3)FlipHorizontal:卡片翻转形式
(4)PartialCurl:书本翻页效果

3,信息页面创建
(1)新建个 Cocoa Touch Class 文件

(2)在接下来的窗口进行如下命名。
类(Class)命名为 InfoViewController。继承(SubClass of)自 UIViewController 类。
同时把 Also create XIB file 选项勾上,这样就能编辑新的视图界面了。

(3)从左侧的项目组织文件可以看到多出的两个文件:InfoViewController.swiftInfoViewController.xib
(4)新创建的消息界面代码如下:
import UIKit

class InfoViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    //关闭当前页面,返回主界面
    @IBAction func onBack(_ sender: AnyObject) {
        self.dismiss(animated: true, completion: nil)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

(5)主界面的代码如下
import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    //跳转到信息页面
    @IBAction func ShowInfo(_ sender: AnyObject) {
        //实例化一个信息界面
        let controller = InfoViewController(nibName:"InfoViewController", bundle:nil)
        //详细界面出现的动画方式
        controller.modalTransitionStyle = .coverVertical
        //界面跳转
        self.present(controller, animated:true, completion:nil)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
评论2
  • 2楼
    2017-12-14 11:08
    lokizero00

    大哥,//实例化一个信息界面
    let controller = InfoViewController(nibName:"InfoViewController", bundle:nil)
    这一句中,后面的bundle参数是干嘛用的。我看很多人都填了:Bundle.main
    而你这里写了nil,这两个有什么区别吗?

    站长回复

    如果不指定Bundle的话(写nil),默认就是Bundle.main。

  • 1楼
    2016-08-05 12:06
    Luan

    大哥你好,想请教假设今天换成三个页面,一个Main.Storyboard,两个xib,那前面两个跟你做的一样,然后第三个xib是从第二个xib跳进来的,然后第三个xib想跳回Main.Storyboard,那要如何做?谢谢!

    站长回复

    可以这么写,连续dismiss两个页面

    self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)