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中创建视图控制器对象


    //得到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



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值