自定义UI控件用xib还是storyboard,或者完全手写代码?

2013-07-14 19:02:14 +08:00
 refresh
在项目中会有很多的自定义UI控件,基本上都是组合类控件,主要目的是为了复用, iPad / iPhone 都可以使用。自定义控件可能是一个UIView,其中包括若干标准控件或者自定义控件,也可能直接就是一个对UIButton的扩展。
之前我是采用纯代码的方式,就是一个.m和.h文件就是一个自定义组件。但我发现这种方式越来越麻烦,首先代码量大了,再就是调整布局很麻烦。
所以现在想用xib或者storyboard,但storyboard似乎不适合这种自定义控件,我对storyboard了解并不多,求建议?
10872 次点击
所在节点    iDev
11 条回复
alexrezit
2013-07-14 19:07:22 +08:00
需要复杂布局用 xib, 反正不用 storyboard 那种反人类的东西...
alexrezit
2013-07-14 19:08:14 +08:00
噢对了不要在 xib 里动任何与布局无关的属性... 不然你会后悔的...
refresh
2013-07-14 19:11:44 +08:00
@alexrezit autoresizingMask算布局属性不
alexrezit
2013-07-14 19:15:07 +08:00
@refresh
肯定算嘛... 就是 frame, bounds, autoresizing mask (如果没用 auto layout).
refresh
2013-07-14 19:15:33 +08:00
我现在的做法是一个UI自定义控件是一个xib+.m+.h,这种做法合理吗,我看MKEntryPanel也是这样做的。但xib是不是要被放弃了,因为在Xcode的新建文件当中,已经找不到xib了,只有在创建ViewController的时候,才可以选择使用xib。
PrideChung
2013-07-14 20:50:47 +08:00
用xib吧,storyboard 里面的东西复用不是很方便,你要先在IB里面硬编码一个字符串id,然后代码里面再用硬编码的字符串来引用。引用的地方一多的话简直是维护的噩梦。而且storyboard的基本元素不是View,而是ViewController,一些UI控件可能不适合做成ViewController。

我最近也开始觉得 storyboard 有点太麻烦,在向xib转移了,storyboard 只用来画静态的 UITableView。用xib有一个好处是如果你要兼容 iPad 的话, iPhone 的xib你可以直接拿来用在 MasterView 或者PopoverController里面,不需要复制一份 iPad 的。

xib放弃不放弃什么的,反正觉得合适就用吧,Xcode新建项目你不要勾上"Use Storyboards",它就是用xib的了。苹果哪天真的作死地把xib支持去掉了的话,大不了像个纯爷们一样用代码写UI罢了。
refresh
2013-07-15 08:50:27 +08:00
@PrideChung 谢谢,感谢已发。我也感觉要组件化storyboard达不到要求,一个ui组件可能是一个uiview,也可能是继承了uibutton,storyboard是以viewcontroller为基础的。

之前我一直是代码构建ui,但xcode用代码构建ui确实太麻烦了,代码量很多,而且不好维护。如果能有html/css这么简洁的方式写ui,那真是太方便了。

现在准备全部改成xib的方式,一个UI组件对应一个xib。另一个问题是,自定义的组件用xib似乎不好继承。
bluebanboom
2013-07-18 22:50:42 +08:00
你这种定义组件的形式不能使用storyboard。最后还是xib。
如果需要大量创建的话,其实可以考虑考虑用脚本,或者定义dsl来实现布局。
脚本的话,lua可以用wax。
FromIsland
2013-07-18 23:21:55 +08:00
手写代码比较好扩展以及复用,我们团队现在都把之前的所有xib逐步去掉了,不过xib很直观.
ldehai
2013-07-19 00:33:57 +08:00
xib好,直观,调整起来方便,代码量少,容易维护。
franksin
2013-08-20 01:32:32 +08:00
我的看法是可以全用,不同场景用不同的东西,当然是前提是先了解三者能做什么,适合做什么。
最近正好摸索了个,有几个体会,供参考(不一定正确滴~):
1. 自从基本告别setFrame, 更多使用constrains, 即使是全代码实现也方便了很多;
2. storyboard对于控制视图的流转、动画非常方便,特别是custom segue;
3. xib写一些小型的、固定的视图控件可以节省些代码,与纯代码比起来,基本上就是省去定义变量的事情,所以差点在xcode5去被取消。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX