XCode学习随笔04--Storyboard配置初体验

2024-06-02 13:38

本文主要是介绍XCode学习随笔04--Storyboard配置初体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


http://blog.sina.com.cn/s/blog_63fa2cac01018ypp.html


Storyboard是iOS5的新特性。使用Storyboard可以更方便的管理应用的界面,同时为视图间的跳转提供了清晰的脉络。

任何时候你都可以在你的项目中添加Storyboard,不管你创建项目的时候有没有勾选“UsbStoryboard”选项,如下图所示。

如果你创建的时候勾选了该选项,那么恭喜你,你已经有了一个Storyboard,并且被设为了MainStoryboard,如下图所示。


同时你的代理类是这样的:

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

return YES;

}


这跟以前可大不一样了!这是因为程序会自动加载Main Storyboard。如果你把上面的MainStoryboard项清空了,那我们的MainStoryboard.storyboard就是一个孤立的文件了,你必须手动加载它,所以上面的代码也得改一改,如下:

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

UIStoryboard *storyboard =[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

self.window.rootViewController =[storyboard instantiateInitialViewController];

[self.window makeKeyAndVisible];

return YES;

}


上面加粗的两句比较重要,前一句是从文件创建UIStoryboard实例对象,后一句则是从这个对象里获取“初始视图控制器”(一个storyboard里只可以设置一个初始视图控制器,相当于这个storyboard的入口,后面还会说到)。但如果你创建项目的时候没有勾选“Use Storyboard”项,那你就要手动添加Storyboard了,如下图所示。



手动创建的Storyboard和自动创建的没有任何不同,打开我们刚刚创建的Storyboard,里面什么都没有,我们不妨拖拽一个NavigationController到里面。



可以看到我们一次拖出了两个视图控制器,这是因为NavigationController需要一个rootViewController。注意我标注的两个小箭头,左边的代表这是一个“初始视图控制器”,右边的代表两个视图控制器之间的关系。选中视图控制器可查看属性。



取消勾选“Is Initial ViewController”后指向视图控制器的箭头也就消失了。再次说一下,一个Storyboard里只能有一个“初始视图控制器”。

下面要做的是在根控制器中添加一个button,然后继续拖拽一个ViewController,点击button新ViewControllerpush进来。

首先添加button,就跟使用IB一样。这次我们拖拽一个UITabbarController,这时如下图所示。

接下来有两种方法:第一种:我们可以直接在Storyboard中完成,按住ctrl从button连接到TabbarController,松开并选择push,这样我们就创建了一个segue(UISotryboardSegue)。

保存并运行



我们没有写任何代码就已经完成了一个简单的框架。

下面是第二种方法:我们准备用代码来实现。(记得把上一步中push类型的segue删除。)首先创建类FirstViewController(Subclass ofUIViewController),然后将RootViewController的底层类改为FirstViewController,如下图。


继续选中TabbarController,并设置Identifier为“second”。



在FirstViewController.m中添加下面的方法并连接到button。

- (IBAction)pressed

{

UIStoryboard *board=[UIStoryboardstoryboardWithName:@"MainStoryboard" bundle:nil];

UITabBarController*nextViewController =[boardinstantiateViewControllerWithIdentifier:@"second"];

[self.navigationControllerpushViewController:nextViewController animated:YES];

}

加粗的代码展示了如何使用Identifier从Storyboard中获取指定的视图控制器。保存并运行,效果和前一种方法完全相同。

下面我们将完成另一个目标:手动触发一个segue。(Storyboard里无法创建一个通过touch来触发的segue。)

拖拽一个UIViewController,按住ctrl从TabbarController的第一个分支连接到新的viewController,同样选择push。



选择刚刚创建的segue并设置Identifier为“touch topush”,然后设置新viewController的Identifier为“third”。(Identifier只是一个名称没有实际意义,可以随便设置。)

添加新类SecondViewController(Subclass ofUIViewController),选中第一个分支并设置其底层类为SecondViewController。然后添加如下方法。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event

{

[selfperformSegueWithIdentifier:@"touch to push"sender:nil];

}

明白这个方法后就可以用任何类型的事件去触发我们在Storyboard中创建的segue了。

继续下一个目标:在segue被触发的时候传递参数到目标视图控制器。

删除TabbarController的第二个分支,拖拽一个UITableViewController,按住ctrl从TabbarController连接到UITableViewController,松开并选择relationship。选中cell设置Identifier为“cell”。然后再拖拽一个UIViewController,并添加一个UILabel。作如下操作。



添加类ThirdViewController(Subclass ofUITableViewController)和类FourthViewController(Subclass ofUIViewController),分别设置为最后两个视图控制器的底层类。

ThirdViewController.m

- (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section

{

return 20;

}

- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *identifier =@”cell“;

UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identifier];

}

cell.textLabel.text = [NSStringstringWithFormat:@"%d",indexPath.row];

return cell;

}

- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender

{

//这里我很谨慎的对sender和目标视图控制器作了判断

if ([senderisKindOfClass:[UITableViewCell class]]) {

if ([segue.destinationViewControllerisKindOfClass:[FourthViewController class]]) {

NSIndexPath *indexPath =[self.tableView indexPathForCell:sender];

FifthViewController*nextViewController = segue.destinationViewController;

nextViewController.string = [NSStringstringWithFormat:@"%d",indexPath.row];

}

}

}

FourViewController.h

@interface FifthViewController : UIViewController

{

IBOutlet UILabel *label;

}

@property (nonatomic,strong) NSString *string;

FourthViewController.m

@synthesize string;

- (void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

label.text = self.string;

}

segue包含属性sourceViewControllerdestinationViewController。segue在触发后但还未执行的时候会调用sourceViewController的prepareForSegue:sender:方法,sender是segue的起始点,可以是button、cell等等。这是你传递参数最好的时机,你可以利用sender参数来找到是哪个cell被点击,利用segue参数来获取源视图控制器对象和目标视图控制器对象,这样你就有足够的信息来传递参数了。

保存并运行


这篇关于XCode学习随笔04--Storyboard配置初体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

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

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