zoukankan      html  css  js  c++  java
  • iOS 将storybord中的视图与viewcontroller相关联

    来新公司已经20多天了,什么正经事儿都没有干,为什么我换了一个公司还是这么闲,真是日了狗了,为什么就没有一个凶狠的老大逼着我干活,我真的好懒啊,好想有人恐吓我让我干活儿啊,干不完就开除那种!天天吃吃玩玩手机睡睡,肚子上的肉都长成一大堆了,天天睡觉捧着肚子感觉跟怀孕了一样啊摔,为什么没人逼着我健身啊,我好想瘦啊啊啊啊。每天吃零食就花了好多钱,工资到手才10k,房租就要3k啊要死了,每个月吃饭就要2k,地铁200,还得在网上淘淘淘,一个月能存5k就谢天谢地了啊啊啊啊,为什么存不住钱,三年了十万块都没有存够啊,都二十五六了怎么买房子啊,一年才存五万什么时候才能存够首付啊岂可修

    我觉得主要是自己太懒了,上个公司没有逼我,这个公司也不逼我,我怎么能就此堕落呢,为了买房子,为了攒够50万,为了18k,一定要振作啊啊啊啊。。。。

    我看公司的文档要死了,全英文文档,真的很考验我的忍耐力,我为什么要来外企写蓝牙,我是不是有病

    怎么说呢,车到山前必有路,来都来了,bing还帮我提薪,我也答应了他要在这里做两年的,不能食言啊,不蒸馒头争口气,不然对不起bing,别人都帮你一把了,你还不好好干,那不是窝囊废吗

    这两天看了看文档,总结一下:

    在storybord中拖入了一个viewcontroller,需要设置这个vc属于的类和storybordID

     

    class代表这个视图属于哪一个类,storybordID就是这个视图的id

    在用代码进行跳转的时候:

        SBViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"sbVC"];
        [self.navigationController pushViewController:vc animated:YES];
    

     但是这样就没有办法重写init方法了,不能在init的时候进行传值,只能通过属性来传值了

    还有一个需要注意的地方,如果先对vc的view进行操作,后面的传值就无法第一时间显示出来,因为操作view的时候viewDidLoad就会被调用,在viewDidLoad中的操作都是在传值操作之前进行的

     

     

     这种情况的话,view的颜色是黄色,输出的name却是null

    虽然说一般人也不会在外面设置什么color,这个对传值的影响不大,但是还是需要知道一下,有时候雷你可以不踩,但是万一掉坑里,哭着喊爸爸都搞不通的时候,可以想想这些东西

    据群里水友表示,使用storybord的时候界面跳转一般用segue,这里也写一下如何用segue跳转

     

    将两个controller连起来,出现segue弹窗 ,这几个选项的意义:

    show:push

    show detail:替换当前scene

    present modally:模态弹出

    present as popover:采用浮动窗的形式把新页面展示出来

    custom:自定义转换

    这几个试的时候只有shouw和present modally成功了,其他的以后用到再说

    这个完了之后要给segue设置一个identifier

     

    然后在需要的时候调用这个segue,这时候如果想要传值,需要实现 prepareForeSegue方法

     

    以上是storybord中的页面跳转和传值,下面是xib的使用方法 

     

     在创建新的类的时候勾选xib,就会创建一个同名的xib文件,所以xib不用专门设置identifer,可以直接用

        NibViewController * nib = [[NibViewController alloc] initWithNibName:@"NibViewController" bundle:nil andName:@"lukky"];
        [self.navigationController pushViewController:nib animated:YES];
    

    在代码中可见,这种方法可以自定义init方法用来传值,比较集成一点

    然后我想说一下xib,storybord,代码布局的优劣:

    复杂而动态的页面用纯代码,

    storybord很直观,开发速度快,可以清楚的看到页面跳转动向

    如果页面简单,需要重复使用,用xib,比如登陆注册页面等

    下面是我抄来的UIView与UIViewController的生命周期总结

    重写View的如下方法

    @implementation YFView
    
    -(instancetype)init{
        
        self = [super init];
        
        NSLog(@"%s", __func__);
        
        return self;
    }
    
    -(instancetype)initWithFrame:(CGRect)frame{
        
        self = [super initWithFrame:(CGRect)frame];
        
        NSLog(@"%s", __func__);
        
        return self;
        
    }
    
    -(instancetype)initWithCoder:(NSCoder *)aDecoder{
        
        self = [super initWithCoder:aDecoder];
        
        NSLog(@"%s", __func__);
        
        return self;
        
    }
    
    -(void)awakeFromNib{
        
        [super awakeFromNib];
        
        NSLog(@"%s", __func__);
    }
    
    
    -(void)layoutSubviews{
        
        NSLog(@"%s", __func__);
        
    }
    @end
    

    重写ViewController的如下方法

    @implementation YFViewController
    
    -(void)loadView{
        
        NSLog(@"%s", __func__);
        
        [super loadView];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        NSLog(@"%s", __func__);
        
        self.view.backgroundColor = [UIColor redColor];
    }
    
    
    -(void)viewDidAppear:(BOOL)animated{
        
        NSLog(@"%s", __func__);
        
        [super viewDidAppear:animated];
        
        
    }
    
    -(instancetype)init{
        
        self = [super init];
        
        NSLog(@"%s", __func__);
        
        return self;
    }
    
    -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
        
        self = [super initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil];
        
        NSLog(@"%s", __func__);
        
        return self;
        
    }
    
    -(instancetype)initWithCoder:(NSCoder *)aDecoder{
        
        self = [super initWithCoder:aDecoder];
        
        NSLog(@"%s", __func__);
        
        return self;
        
    }
    
    -(void)awakeFromNib{
        
        NSLog(@"%s", __func__);
        
        [super awakeFromNib];
    }
    
    @end
    

    结论总结

    1. 如果控制器是直接通过代码创建出来的,并且调用方法为[[YFViewController alloc]init]创建VC的生命周期为:
    -[YFViewController initWithNibName:bundle:]
    -[YFViewController init]
    -[YFViewController loadView]
    -[YFViewController viewDidLoad]
    -[YFViewController viewDidAppear:]
    
    1. 如果创建控制器时勾选了XIB,那么调用方法为[[YFViewController alloc]init]创建VC时的生命周期为:
    -[YFViewController initWithNibName:bundle:] 
    -[YFViewController init]
    -[YFViewController loadView]
    -[YFViewController viewDidLoad]
    -[YFViewController viewDidAppear:]
    
    1. 如果是通过SB创建控制器,那么VC的生命周期为:
    -[ViewController initWithCoder:]
    -[ViewController awakeFromNib]
    -[ViewController loadView]
    -[ViewController viewDidLoad]
    -[ViewController viewDidAppear:]
    
    1. 如果纯代码创建UIView,调用方式为YFView *yfView = [[YFView alloc]init];那么它的生命周期为:
    -[YFView initWithFrame:]
    -[YFView init]
    -[YFView layoutSubviews]
    
    1. 如果纯代码创建UIView,调用方式为YFView *yfView = [[YFView alloc]initWithFrame:[UIScreen mainScreen].bounds];那么它的生命周期为:
    -[YFView initWithFrame:]
    -[YFView layoutSubviews]
    
    1. 如果通过XIB创建UIView,调用方式为NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"YFView" owner:nil options:nil];[array lastObject];那么它的生命周期为:
    -[YFView initWithCoder:]
    -[YFView awakeFromNib]
    -[YFView layoutSubviews]
    

    辛辛苦苦把人家的东西复制下来,我也不知道图个啥,明明存个链接就可以的,但是太有用了怕对方哪天不开心删博客,还是自己存下来,233 

    https://www.jianshu.com/p/66702f38e977

    https://blog.csdn.net/xy_26207005/article/details/51002707

    https://blog.csdn.net/liuyinghui523/article/details/62036465

  • 相关阅读:
    最大子数组
    链表插入排序
    链表求和
    有效回文串
    排球比赛计分系统
    超市收银系统
    三层架构
    Wpf+数据库代码封装+策略模式封装
    封装逻辑用策略模式实现
    代码封装
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/8981070.html
Copyright © 2011-2022 走看看