大家是用Interface Builder还是手工敲界面的呢?ViewController 究竟应该扮演怎样的角色?

2012-05-22 22:38:25 +08:00
 Elfe
刚开始玩iOS。发觉StoryBoard的拖拖拽拽做得还真不错。
不过,按我以前的习惯,肯定是手敲代码的。我只是尚不确定究竟该敲xml格式的 .storyboard 文件,还是应该敲 .h .m 文件把界面用代码给编出来。(粗略的看了看,我比较倾向于敲 .storyboard,就像我以前写 WPF 程序时手工敲 xmal 一样。不过对于老版本的,刚才看了眼.nib,这个xml的可读性也太差了,还是用 .h/.m 代码为好。 )

直接敲代码的好处,主要是:
1)效率高,光操作键盘当然比键盘+鼠标要高效
2)代码完全在自己控制之下,尤其适用于有代码洁癖的人
3)对程序实现有更好的了解

所以当我得知接手的项目都是用手工敲的代码来做UI的时候,还挺高兴。
可现在仔细一看代码,有点发蒙:怎么命名为XXXiewController的类里好多都是画UI的代码呢?例如:
UILabel* headerTitle = [[UILabel alloc] initWithFrame:CGRectMake(61, 0, 198, 45)];
难道它们不应该被放置在XXXView的类中?
再仔细看看,那些XXXView的类中也有很多画UI的代码。
这也太混乱了吧?

这么说来,使用拖拖拽拽的方式,或许至少有一大好处,就是自动帮你运用了MVC模式,确保代码大的结构上没有问题。我接手的这个项目,自己写,结果就写的混乱了。

还是我对Cocoa 中 MVC 中的 C 中的 ViewController 理解有误?
我原以为,在MVC/MVP/MVVM中,V应该只包含界面相关的代码。最理想的,应该没有任何的 code behind (也就是说所有的V的代码都在 xml 文件中),除非这是纯粹界面相关的逻辑。而除了纯粹界面相关的逻辑,其它界面逻辑代码都应该在 ViewController 中。ViewController 不应该包含任何界面细节的代码。如果不使用.nib 或 .storyboard,那等同的内容就应该在 XXXView 的.m 文件中实现,不应该放在 XXXViewController 中。

啰啰嗦嗦写了一大堆,就是这么三个问题:
1)上面这一段,我对ViewController角色的理解,正确么?
2)你是用 InterfaceBuilder 拖拖拽拽,还是手工敲UI?理由?
3)如果手工敲UI,是敲xml 文件还是.h/.m文件?等同于原来.nib 或 .storyboard 的代码分别在哪些文件中实现?
10804 次点击
所在节点    iDev
29 条回复
Yonsm
2012-05-25 18:49:26 +08:00
多谢@lex
囧,那现在就是有了啊。是以前老版本时候没有设置还是我没注意到?
Yonsm
2012-05-25 18:55:29 +08:00
@Elfe 我个人对MVC的理解是:Controller loadView 中是可以创建View的,除非一个View的代码足够复杂或者有特定的目的,否则永远不要去子类化View(说简单点,Controller就是搭积木,除非一个没有线程积木块符合你的要求,否则不要自己去制造积木块)。当然一个程序可能会有大量复杂的界面,所以子类化View是不可避免的(xib文件也可以认为是子类化View或者子类化Controller)。

最后,实际上我习惯是在viewDidLoad中去创建sub view,viewDidUnload的时候去设置view相关的成员变量为nil,不知道是不是我的理解错误了。
lldong
2012-05-25 19:08:52 +08:00
最近RubyMotion的社區在開發一個DSL,teacup,可以利用類似CSS的方式寫界面
https://github.com/rubymotion/teacup
edison0951
2012-05-29 15:55:39 +08:00
IB更多的适合静态元素,CONTROLLER比较适合动态元素
MosquitoLiu
2012-06-04 11:40:10 +08:00
手工。能更好的控制内存。
xatest
2012-06-04 12:22:10 +08:00
为了兼容iOS 4所以用nib来做界面而不是Storyboard,做完才想到如果要改成只兼容iOS 5+的Storyboard,界面岂不是要全部重做一次?所以决定以后把界面用代码实现。
xuming
2012-06-04 14:00:20 +08:00
MVC不是圣经,没必要完全遵守,对于不是很复杂的界面,个人觉得用代码,比用nib要灵活的多。
davidzhang
2013-05-28 16:41:41 +08:00
你用哪个方便就用哪个喽,什么角色,我自己觉的她是扮演view的绝色哦
Nobuta
2013-08-06 15:52:26 +08:00
居然说用纯代码写效率更高?你用纯代码写个复杂点的设置页面,然后再用storyboard设计一个设置页面,然后你就知道storyboard的好了,我以前也喜欢手工码字,后来想想何必为难自己呢 ~~ 当然在一些需要灵活实现的地方肯定还是要纯敲代码的

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

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

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

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

© 2021 V2EX