iOS开发中一些重要的系统方法使用注意事项总结

来源:互联网 发布:淘宝那家零食店好 编辑:程序博客网 时间:2024/04/26 07:08

开发过程中,一些系统的方法会在默认的时候自动调用,做一些相对应的操作,这些知识点很小,但是很重要,有时候会对开发效率起到很大的重要,所以这里总结梳理一下,方便开发。

一:添加子控件,布局内容

很常见的一种情形是在控制器的viewDidLoad方法里面加一些控件,来完成相应的需求,但是,这个看似简单的事情,有时候却很让人头痛,莫名其妙的就会出现子控件排布错乱,并不是你想要的效果,出现的情形就是因为Xib,比如你的控制器的view是通过xib创建的,那么你在控制器的viewDidLoad方法里面处理子控件的位置时,又用到了控制器的View的尺寸,就会引发问题,究其原因就是因为通过xib创建的控制器的View在viewDidLoad的时候,View的尺寸还是xib描述的那样,目前的xib默认的都是600X600的,所以你的计算的尺寸就是这个,你觉得会正确吗?所以牵涉到xib描述的View的时候,又要在其内部添加一些子控件,就要格外谨慎,注意添加的时机,注意你参照的尺寸是否会是你最终看到的。所以解决这种问题的着手点就是时机,要搞清楚xib的布局时机,一些方法的调用时机,尤其是一些系统方法,系统自己会在那个时机调用,这个时机里系统内部在做什么操作,而你应该做什么要十分清楚才行。

1.对于控制器而言,如果是通过xib创建的View,viewDidLoad方法里面不适合布局子控件,但是可以先添加进去,系统提供了方法专门来让你进行布局,即(void)viewDidLayoutSubviews方法(系统方法),会在控制器的View布局完内部的子控件的时候自动调用,对于要布局的内容可以在这里面进行布局。

2.对于xib描述的控件而言,(void)awakeFromNib系统方法),时机相当于上面的viewDidLoad,这个是在xib加载完成的时候调用,这个时候的加载出来的xib控件的尺寸就是你当初拖拽出来的尺寸,是不靠谱的(对于不同的屏幕来说),所以在这个方法里面布局子控件也是不行的,同样,系统又提供了方法给我们专门进行布局,即 (void)layoutSubviews(系统方法),这个方法会在View第一次创建的时候,以及View的尺寸发生变化的时候系统自动调用,我们可以在这个里面进行布局子控件。

PS:有时候一些情况下,添加完子控件后我们就需要进行布局,想立刻得到效果,我们想手动的调用layoutSubviews是不允许的,但是同样有提供的方法 setNeedsLayout(系统方法),我们只需要调用这个方法即可,系统就会自动的再次调用layoutSubviews方法,进行布局子控件。同样,类似的还有一个情况,就是调用setNeedsDisplay(系统方法),系统就会自动调用 (void)drawRect:(CGRect)rect(系统方法),进行重绘内容。

二:键盘的弹出与关闭  (单例,window)
开发中,键盘也是一个很重要的控件,这里先简单列出一种常见的Bug的场景及解决办法,后续会持续添加:
场景:在一个控制器中叫出了键盘,然后push出一个新的控制器,新的控制器中同样叫出了键盘,但是还在对键盘进行操作的时候,直接就pop出去了新的控制器,回到之前的控制器,那么就有可能出现,之前的那个控制器对键盘弹出的一些通知没有起作用,原因是因为键盘一直都在弹出,并没有被重新叫出来,所以不会再次发出键盘弹出的通知,这时的解决办法是手动的在之前的控制器叫出键盘之前,先降下去键盘(释放第一响应者),然后再叫出就可以完美解决,同时也可以得到一个知识点:系统的键盘只有一个,多处使用。(后续可以抽时间验证是否是单例的。)另外一个知识点:键盘其实是个window,盖在最上面的级别


很多的知识点都很细小,但是对于开发至关重要,这里先总结到这里,后面持续更新!








0 0
原创粉丝点击