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 · 10848 次点击
    这是一个创建于 4155 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在项目中会有很多的自定义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   ·   实用小工具   ·   3131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.