iOS-Storyboard入门指南

本文深入探讨了如何在iOS应用开发中高效利用Storyboard进行界面设计和控制器管理,包括创建Storyboard文件、自定义segue以及通过代码动态加载和切换ViewController,提供了详细的步骤和示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 、在工程中创建一个storyboard文件,比如我现在"Authorization.storyboard”这个文件。然后我们可以在storyboard可视化视图中创建多个viewcontroller,navigationcontroller或者Storyboard Reference。

如果storyboard中存在比较多VC,关键要找到入口,Storybord Entry Point
在这里插入图片描述
举例:
在storyboard文件中创建Storyboard Reference,记得在第五个入口设置Storyboard名称

在这里插入图片描述
Authorization.storyboard中创建Splash ScreenVC Scene,创建步骤如下,SplashScreenVC为对应的controller文件。注意点,必须填写ClassStoryboard ID这两个选项

在这里插入图片描述

2、用代码来获取刚才创建的storyboard。也就是第一步的"Authorization.storyboard" 文件。

let storyboard = UIStoryboard(name: "Authorization", bundle: nil)

2-1、storyboard带有 Storyboard ID方法来获取 SplashScreenVC。

let current = storyboard.instantiateViewController(withIdentifier: "SplashScreenVC") as! SplashScreenVC

2-2、由闪屏界面切换到登陆输入框界面(authNavVC)
创建一个RootparentVC:UIViewController,提供一个var current:UIViewController变量。(curent根据不同情况展示不同的vc)
假设一开始是显示SplashScreenVC(闪屏界面)

 init() {
        let storyboard = UIStoryboard(name: "Authorization", bundle: nil)
        current = storyboard.instantiateViewController(withIdentifier: "SplashScreenVC") as! SplashScreenVC
        super.init(nibName:  nil, bundle: nil)
    }

2-3、在viewdidLoad (当前VC添加新VC,设置新VC的frame,当前view添加新VC的view,新VC move to parentVC)

 addChildViewController(current)
 current.view.frame = view.bounds
 view.addSubview(current.view)
 current.didMove(toParentViewController: self)

2-4、切换显示登陆界面(authNavVC)(当前VC添加新VC,设置新VC的frame,当前view添加新VC的view,新VC move to parentVC)

   func showLoginScreen() {
        let storyboard = UIStoryboard(name: "Authorization", bundle: nil)
        let authNavVC = storyboard.instantiateViewController(withIdentifier: "AuthNavVC") as! UINavigationController
        
        addChildViewController(authNavVC)
        authNavVC.view.frame = view.bounds
        view.addSubview(authNavVC.view)
        authNavVC.didMove(toParentViewController: self)
        
        current.willMove(toParentViewController: nil)
        current.view.removeFromSuperview()
        current.removeFromParentViewController()
        current = authNavVC
    }

3、自定义UIStoryboardSegue
在这里插入图片描述

import Foundation

class ReplaceSegue : UIStoryboardSegue {
    
    override func perform() {
        let sourceViewController = self.source
        let destinationViewController = self.destination
        
        let navigationController = sourceViewController.navigationController
        
        navigationController?.pushViewController(destinationViewController, animated: false)
        
        guard var mutableVC = navigationController?.viewControllers else {
            debugPrint("[ReplaceSegue] Error: no view controllers")
            return
        }
        
        guard let sourceViewControllerIndex = mutableVC.index(of: sourceViewController) else {
            debugPrint("[ReplaceSegue] Error: no index for source view controller")
            return
        }
        
        mutableVC.remove(at: sourceViewControllerIndex)
        
        navigationController?.setViewControllers(mutableVC, animated: true)
    }
    
}

3-1、举例:点击会话列表某一条信息,携带会话ID参数,进入聊天详情。
在会话列表代码为:

 performSegue(withIdentifier: "SA_STR_SEGUE_GO_TO_CHAT".localized , sender: dialog.id)

重写prepare方法。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "SA_STR_SEGUE_GO_TO_CHAT".localized {
            if let chatVC = segue.destination as? ChatViewController {
                chatVC.dialogID = sender as? String
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值