最近在纠结是否要开始使用storyboard,因为autolayout是趋势。
之前一直比较老派的手写代码,但是目前感觉手写代码来适配不同分辨率的工作量的确太大,因此决定使用autolayout。
但是对于storyboard比较犹豫,一是怀疑storyboard对于页面跳转的处理能否像手写代码一样灵活(大量页面push跳转需要自动判断是否登录,如果没有登录需要先跳转到登陆页,或者说页面中会存在子viewcontroller,而不是一个单纯的viewcontroller)。storyboard除了组织页面跳转外,似乎也没有其他好处。
大家使用storyboard或者ib开发的应用界面复杂度能到什么级别?
3楼 @jeffery ⊙﹏⊙b汗,大哥不能这么说,网络上尽量不要鄙视他人。前面问话我尽量小白一些,是希望更多人参与讨论。一个成熟的项目,技术选型或者调整需要很谨慎,不是想怎么样就怎么样,要充分评估可能出现的风险。
我这个问题的重点在于使用storyboard或者ib达成的应用复杂度。因为我参与过的这么多项目,复杂度远超大部分人能够接触过的项目,都是手写代码,所以对于storyboard或者ib能够承载的项目复杂度一直持谨慎态度(还有低版本iOS兼容性的考虑)。同时我其实也毫不怀疑storyboard或者ib在小项目或者工具类应用上的便利性。
这是为什么我想发起这个讨论的原因----手写代码和storyboard或者ib在实践中的边界在什么地方。storyboard和ib的项目在实施中会在什么时间点遇到不能解决或者克服的问题必须大量手写代码介入重构?手写代码的项目同样会在什么时间点会遇到不能解决或者克服的问题必须引入ib或者storyboard来解决?
我希望这个讨论比其他讨论更有意义的地方在于,我想尝试寻找的是两者最佳实践的边界而不是比较两者谁更好。
页面的控件不怎么改变,动画比较少的情况,我会选择SB,因为布局直观明了。
现在开发一般都是sb+手写代码两个交替使用,并不是说一个项目只能用SB或者只能是手写代码。
现在SB已经完善很多了,不过个人还是比较喜欢一个人开发的时候用SB,多人合作的时候可能需要解决很多冲突,最好一个人一个SB
storyboard对于页面跳转的处理能像手写代码一样灵活。 可以先在storyboard上控制器之间连线,命名segue,代码判断是否跳转,再执行 [self performSegueWithIdentifier:@"xxxSegue" sender:nil]即可。
在主要组织页面关系的时候用连线,其余像登录控制器多处需要进行跳转的次要关系,就不要连线了。直接通过代码初始化控制器跳转,和使用xib类似。
UIStoryboard *storyBoard= self.storyboard;
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"LoginViewController"];
总体上来说,Storyboard有以下好处:
– (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
方法,每个View Controller的跳转逻辑都聚集在一处,这方便我们统一管理界面跳转和传递数据。但是 Storyboard 也有非常大的缺点:
现在就我了解,国内主要的大公司都没有使用 storyboard ,别说 storyboard 了,对于xib 很多公司都不提畅使用。关于 autolayout , 可以使用 Masonry( https://github.com/Masonry/Masonry ) 这样的开源库来手写实现。
另外,这儿有关于Facebook不用storyboard的讨论:http://qr.ae/Bs37O
我也写过一篇文章讨论过这个:http://blog.devtang.com/blog/2012/12/15/do-not-use-storyboard/
至于楼主提的问题,就像问“ VB 能够写多复杂的程序”一样,其实不太好。对于牛逼的人,用不用 storyboard 都不会限制你写出程序的复杂性,只是说爽不爽,方不方便,好不好用而已。
对于 8楼 @tangqiaoboy 说的2个缺点,我说下个人意见: