自定义UI控件用xib还是storyboard,或者完全手写代码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
refresh
V2EX    iDev

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

  •  
  •   refresh 2013-07-14 19:02:14 +08:00 11213 次点击
    这是一个创建于 4474 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在项目中会有很多的自定义UI控件,基本上都是组合类控件,主要目的是为了复用, iPad / iPhone 都可以使用。自定义控件可能是一个UIView,其中包括若干标准控件或者自定义控件,也可能直接就是一个对UIButton的扩展。
    之前我是采用纯代码的方式,就是一个.m和.h文件就是一个自定义组件。但我发现这种方式越来越麻烦,首先代码量大了,再就是调整布局很麻烦。
    所以现在想用xib或者storyboard,但storyboard似乎不适合这种自定义控件,我对storyboard了解并不多,求建议?
    11 条回复    1970-01-01 08:00:00 +08:00
    alexrezit
        1
    alexrezit  
       2013-07-14 19:07:22 +08:00   1
    需要复杂布局用 xib, 反正不用 storyboard 那种反人类的东西...
    alexrezit
        2
    alexrezit  
       2013-07-14 19:08:14 +08:00
    噢对了不要在 xib 里动任何与布局无关的属性... 不然你会后悔的...
    refresh
        3
    refresh  
    OP
       2013-07-14 19:11:44 +08:00
    @alexrezit autoresizingMask算布局属性不
    alexrezit
        4
    alexrezit  
       2013-07-14 19:15:07 +08:00
    @refresh
    肯定算嘛... 就是 frame, bounds, autoresizing mask (如果没用 auto layout).
    refresh
        5
    refresh  
    OP
       2013-07-14 19:15:33 +08:00
    我现在的做法是一个UI自定义控件是一个xib+.m+.h,这种做法合理吗,我看MKEntryPanel也是这样做的。但xib是不是要被放弃了,因为在Xcode的新建文件当中,已经找不到xib了,只有在创建ViewController的时候,才可以选择使用xib。
    PrideChung
        6
    PrideChung  
       2013-07-14 20:50:47 +08:00   1
    用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
        7
    refresh  
    OP
       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
        8
    bluebanboom  
       2013-07-18 22:50:42 +08:00
    你这种定义组件的形式不能使用storyboard。最后还是xib。
    如果需要大量创建的话,其实可以考虑考虑用脚本,或者定义dsl来实现布局。
    脚本的话,lua可以用wax。
    FromIsland
        9
    FromIsland  
       2013-07-18 23:21:55 +08:00
    手写代码比较好扩展以及复用,我们团队现在都把之前的所有xib逐步去掉了,不过xib很直观.
    ldehai
        10
    ldehai  
       2013-07-19 00:33:57 +08:00
    xib好,直观,调整起来方便,代码量少,容易维护。
    franksin
        11
    franksin  
       2013-08-20 01:32:32 +08:00
    我的看法是可以全用,不同场景用不同的东西,当然是前提是先了解三者能做什么,适合做什么。
    最近正好摸索了个,有几个体会,供参考(不一定正确滴~):
    1. 自从基本告别setFrame, 更多使用constrains, 即使是全代码实现也方便了很多;
    2. storyboard对于控制视图的流转、动画非常方便,特别是custom segue;
    3. xib写一些小型的、固定的视图控件可以节省些代码,与纯代码比起来,基本上就是省去定义变量的事情,所以差点在xcode5去被取消。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3106 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:27 PVG 08:27 LAX 17:27 JFK 20:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86