StoryBoard配置

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

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

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

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

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

return YES;

}

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(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,里面什么都没有,我们不妨拖拽一个Navigation Controller到里面。

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

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

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

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

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

保存并运行

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

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

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

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

- (IBAction)pressed

{

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

UITabBarController *nextViewController =[board instantiateViewControllerWithIdentifier:@"second"];

[self.navigationController pushViewController:nextViewController animated:YES];

}

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

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

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

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

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

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

{

[self performSegueWithIdentifier:@"touch to push" sender:nil];

}

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

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

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

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

ThirdViewController.m

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

{

return 20;

}

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

{

static NSString *identifier = @”cell“;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

}

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

return cell;

}

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

{

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

if ([sender isKindOfClass:[UITableViewCell class]]) {

if ([segue.destinationViewController isKindOfClass:[FourthViewController class]]) {

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

FifthViewController *nextViewController = segue.destinationViewController;

nextViewController.string = [NSString stringWithFormat:@"%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参数来获取源视图控制器对象和目标视图控制器对象,这样你就有足够的信息来传递参数了。

保存并运行

StoryBoard配置

时间: 2024-11-06 13:27:10

StoryBoard配置的相关文章

IOS之UIKit_Day11

day11 回顾: 1.UITabBarController                    .viewControllers存储管理的所有控制器                    .tabBaritem.title                    .tabBaritem.image                    .tabBaritem.selectedImage                    .tabBaritrm.badgevalue             

IOS开发之TabBarItem&NavigationBarItem

想必大家都用过微信,微信间的页面切换是如何做成的呢?接下来我们用storyboard结合着代码来模拟一下微信的视图控制模式. "工欲善其事,必先利其器",下面主要是对storyboard来进行我们项目框架的搭建的,必要时,用代码实现我们的页面效果.在IOS开发中常用的多视图间的切换大致有TabBarController, NavigationBarController, 和模态窗口.第一次接触模态的概念是在Web前端的内容中接触的.下面将会结合一个实际的效果来简单的介绍一下TabBar

UIViewController---汇总

1 UIWindow.UILabel.UIColor.UIScreen.UIViewController.UIView.UIControl.UIButton.IBOutlet.IBAction.UIStepper. UISlider. UISwitch.UITextField.UIAlertView.UIActionSheet.UINavigationController.UIBarButtonItem.UIImageView.UIScrollView.UIPageContro.UITableV

25.怎样创建一个Swift项目?

经历前面三部分的学习之后,我们对于Swift的有了基本的了解,知道它的基础语法,也知道了类.结构体.枚举.协议.扩展等等内容.但知道上面这些内容,并不代表我们就能很好的进行实际的项目开发了,本部分内容将手把手的教你进行Swift的项目开发. 1.新建Swift项目 打开XCode,选择[File] --> [New] --> [Project](也可以同时按住command+shift+N快捷创建),如下图所示: 单击[Project]之后,将弹出选择项目模板的界面,这里我们可以选择[Sing

//四舍五入//得到倒序//比较字符串//拦截时间,实现超时锁屏//判断是否越狱//配置PodFile//Storyboard中跳转操作//处理不可逆的push界面操作

//处理不可逆的push界面操作 VerifyRealNameViewController *verifyRealNameCtrl = [VerifyRealNameViewController viewControllerWithStoryBoard:@"Registe" identify:@"VerifyRealNameViewController"]; UIViewController *topCtrl = [self.navigationController

iOS8扩展插件开发配置

一.iOS8扩展插件概述 WWDC14除了发布了OS X v10.10和switf外,iOS8.0也开始变得更加开放了.说到开放,当然要数应用扩展(App Extension)了.顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享.可以将扩展理解为一个轻量级(nimble and lightweight)的分身. 以下为常见的三类插件: Target Type Extension point identifi

iOS学习之UI可视化编程-StoryBoard

一.StoryBoard与xib 对比: 相同点:都属于IB编程的方式,可以快速构建GUI. 不同点:xib侧重于单文件(单独的控制器或者视图)编辑,storyboard侧重于多页面关联.storyboard可以直观的梳理出页面间的逻辑,并且所有页面跳转逻辑均可在-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender:方法完成,方便界面间数据统一管理. 注意事项:在AppDelegate的-application:d

iOS开发-UI (七)StoryBoard

知识点 1.UIStoryBoard介绍 2. UIStoryBoard的界面跳转 3. UIStoryBoard界面之间的传值 ========================= UIStoryBoard介绍 UIStoryBoard是你可以用来定义用户界面的一种新的方式,像xib.与xib不同的是它可以同时管理多个ViewController,而且可以在UIStoryBoard中配置ViewController 之间的跳转关系. 如果主窗口只有一个view controller是作为UISt

Xcode 中 Git 的配置与使用

Xcode 中 Git 的配置与使用主要围绕下面几个问题展开阐述: 问题1,如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在Xcode中克隆远程服务器代码库到本地? 问题4,如何使用Xcode获取远程代码库数据,并解决冲突问题? 一.如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 创建代码库有两种方式: 方式1:新建工程的时候创建 1. 勾选Create Git repository on