刚开始玩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 的代码分别在哪些文件中实现?
不过,按我以前的习惯,肯定是手敲代码的。我只是尚不确定究竟该敲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 的代码分别在哪些文件中实现?