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

相关文章

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。