iOS-个人整理22 - 可视化编辑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中创建视图控制器对象


//得到storyBoard  
UIStoryboard *tabBarSB = [UIStoryboard storyboardWithName:@"TabBarController" bundle:nil];  
//得到VC  
UITabBarController *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  
{  
    //获取当前VC  
    UIViewController *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,要进行判断,不然后续对错误的控制器进行操作,会崩  
      
    //判断是哪个segue  
    if ([segue.identifier isEqualToString:@"toSecondSegue"]) {  
        NSLog(@"to detailVC");  
      
    //得到发起跳转的ViewController  
    UIViewController *selfController = [segue sourceViewController];  
    //得到目标ViewController,即将跳转到的ViewController  
    SecondViewController *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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容