iOS个人整理23-可视化编辑2-StoryBoard,segue跳转,可视化自定义cell

本文主要是介绍iOS个人整理23-可视化编辑2-StoryBoard,segue跳转,可视化自定义cell,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、storyBoard的使用


StoryBoard的本质是一个xml文件,在编译时生成nib的二进制文件,运行时nib文件被加载并开始创建和实例化GUI元素

使用storyBoard的项目均以初始化storyBoard文件作为整个程序的初始化入口


xib和StoryBoard的对比

相同:都属于IB编程的方式,可以快速创建GUI

不同:xib侧重于单文件编辑,storyBoard侧重于多页面关联。storyBoard可以直观看到页面之间的逻辑,并且所有页面跳转逻辑均可在

-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender方法中完成方便界面间数据统一管理。


这里还有一个问题,如果界面过多,可以放在不同的storyBoard里,逻辑更加清晰,渲染也更快。根据新的storyBoard的名字,就能通过代码得到对应的storyBoard。


1.设置主启动的storyBoard,这两个地方填storyBoard的名字,决定哪个storyBoard是入口,两处修改一处即可,编译时另一处会自动修改

第一图是工程的General中

  


2.设置应用程序的初始窗体,设置该storyBoard的第一个视图是哪个ViewController




3.在storyBoard中的Controller可以设标识,通过标识在storyBoard中创建视图控制器对象


    //得到storyBoardUIStoryboard *tabBarSB = [UIStoryboard storyboardWithName:@"TabBarController" bundle:nil];//得到VCUITabBarController *tabBarC = [tabBarSB instantiateViewControllerWithIdentifier:@"tabBarC"];


二、storyBoard的跳转和segue


storyBoard页面跳转有两种

1.代码方法使用代码通过segue标识来跳转,segue要提前定义好,要把identifier填好

如果想进行判断后再跳转,比如登录验证,就可以使用下面的方法,但是拉segue的时候就不从button上面拉,选中第一个ViewController,拉到第二个ViewController可以产生一个view到view的segue,通过按钮触发这个segue

通过点击按钮调用下面的方法来触发这个segue

 [self performSegueWithIdentifier:@"toSecondSegue" sender:nil];

2.直接拖拽,拖拽按钮的连线关联两个页面,会产生一条关联线segue,不需要添加相应方法

  


show:push出下个界面

show Detail:replace

Present Modally:模态出下个界面

Present As Popover:模态推出

Custom:自定义,需要自定义segue


自定义segue


1.新建一个类继承于UIStoryBoardSegue

2.选中前一个视图控制器,连线后选中Custom

3.选中自定义segue,设置segue的identifier和关联类

4.在segue里重写perform方法(界面间跳转默认执行的方法),自定义跳转效果

-(void)perform
{//获取当前VCUIViewController *vc_1 = [self sourceViewController];//目标UIViewController *vc_2 = [self destinationViewController];//跳转[vc_1.navigationController pushViewController:vc_2 animated:YES];//这里提一下使用加动画的跳转//如果是两个ViewController之间需要动画跳转,需要将将要出现的VC作为当前VC的子控制器//否则进行下面的页面切换,新的view上的控件都是不显示的//这样大家共用一个navigationController[vc_1.navigationController addChildViewController:vc_2];[vc_1.navigationController.view addSubview:vc_2.view];//自定义页面切换效果,新的界面的控件不显示[UIView transitionFromView:vc_1.view toView:vc_2.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromTop completion:nil];//如果要各自使用不同的navigationController
/*UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:vc_2];[self.navigationController addChildViewController:navC];[self.navigationController.view addSubview:navC.view];[UIView transitionFromView:self.navigationController.view toView:navC.view duration:0.25 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];  
*/}


界面间传值

在跳转时会执行-(void)prepareForSegue:(UIStoryBoardSegue*)segue sender:(id)sender方法

在这个方法里根据不同的segue标识符来完成数据处理

//segue:转场,通过该方法以得到(A push B) A和B
//sender:我们点击某个控件触发的跳转动作
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{//这里有个问题,如果控制器有多个segue,要进行判断,不然后续对错误的控制器进行操作,会崩//判断是哪个segueif ([segue.identifier isEqualToString:@"toSecondSegue"]) {NSLog(@"to detailVC");//得到发起跳转的ViewControllerUIViewController *selfController = [segue sourceViewController];//得到目标ViewController,即将跳转到的ViewControllerSecondViewController *secondVC = [segue destinationViewController];secondVC.myTitle = @"1111";}//还有一种通过storyBoard得到VC的方法,要给视图控制器设置好storyBoardID
//    UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//    SecondViewController *secondVC = [mainSB instantiateViewControllerWithIdentifier:@"SecondVC"];//但这种方法赋值不了,下面一句没有效果
//    secondVC.myTitle = @"2222";}

 


三、storyBoard自定义cell


storyBoard自定义cell的步骤,这个不记少了什么就很烦


如果我们自己拖一个UITableViewController,或者,给一个ViewController上拖一个UITableView,再给UITableView上拖一个UITableViewCell

我们会看到这样的情况,当然,上面的label和button要自己加



以UITableViewController为例

1.先拖一个UITableViewController控件到storyBoard

2.创建一个UITableViewController类

3.将两者关联



4.创建一个UITableViewCell的类,并让它于控件上的CELL关联,这里要注意,一定要点对位置,确定选择了cell

这一看那个拖拉大小的小点,选择了cell一定会出现


5.在storyBoard上给cell添加控件,并与自定义的CustomTableviewCell类关联。

6.在storyBoard创建表视图的方法中,在UITableViewController类中不需要进行cell的注册,导入CustomTableviewCell,直接使用即可

  如果使用系统自带的可视化板上的Cell,也是要设置Identifier的,不用注册。

7.其他代理方法与Tableview无异


这里经常出问题,cell没有找到,通常是跳转的方法有问题,要通过mainStoryBoard去找对应的视图控制器,才能对应好prototype cells



这篇关于iOS个人整理23-可视化编辑2-StoryBoard,segue跳转,可视化自定义cell的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980710

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (