作者HuangJC (吹笛牧童)
看板MacDev
标题[问题] 怎麽写 table view
时间Thu Mar 13 02:58:55 2014
网路上查到的范例,是从 table view controller 写起的
这样可以让 table view, table view cell 先摆好
而我必需从 UIViewController 开始写
不能使用 table view controller
目前我是用继承改写的方式,写一个 my table view cell
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7
http://tinyurl.com/pabdxxy
文件中说除了用继承的写法,还有别的方法
似乎别的方法就可以直接用 storyboard 来画了,不用自己 hardcode 算座标
在 list 5-3 下的说明
The string identifier you assign to the prototype cell is the same string
you pass to the table view in dequeueReusableCellWithIdentifier:
这里好像是说,可以直接在 storyboard 里打 Identifier
也可以直接 layout 一个 table view cell
但我实在找不到在哪里打
因为我的画面只有在 root View 里,塞入一个 table view
并没有 table view controller 这样的东西
还是说,我直接拉一个 table view cell 放在 table view 的里面? 嗯,塞不进去
所以我只好用继承改写 table view cell,并且 hard code 内部元件的方法写了
有简单点的方法吗? 谢谢
--
活动/美食计划
兰屿 鱼白 胜兴车站 星月天空 武陵 草岭古道
嘉义阿里山小火车 保龄球 司马库斯
手包水饺 日月潭缆车 合欢攻顶 马祖
盐山 南庄 澎湖 溪头/松林町 南投天梯
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.251.197.63
※ 编辑: HuangJC 来自: 60.251.197.63 (03/13 03:28)
1F:→ whitefur:IB(interface builder, 也就是你说的"IDE")里是可以设 03/13 09:25
2F:→ whitefur:reuse identifier的, 你按cell就可以设了. 03/13 09:26
找到了,谢谢 Orz
3F:→ whitefur:照里说在IB里是可以直接拉cell到table view controller上 03/13 09:28
4F:→ whitefur:我也不知道为什麽你塞不进去 03/13 09:29
5F:→ howdiun:cell可以塞进去的,你用力一点看看 03/13 09:39
本来以为我的问题解决了... Orz
我重开一个新的专案,在 storyboard 中都很顺利
但如果我要求用 xib 档,一切就不顺利!!
在 xib 中塞入 table, table 看起来就不太一样
要再塞 cell,也塞不进去
以"xib UITableViewCell" 搜寻找到解法了
http://iosmadesimple.blogspot.tw/2012/10/uitableviewcell-using-interface-builder.html
http://tinyurl.com/m7dy5zq
这里以动态的方式载入 xib 档(搜寻关键字 loadNibNamed)
原来一个 xib 档可以有不只一个 top level 元件;反正它只是个 resource file
能开档,搜寻,找出 UI 来画就好
另外,我还没很搞懂什麽是 controller
有 UIView, 也有 UIViewController
有 UITableView, 也有 UITableViewController
目前我只知道一个画面要用一个 controller,然後其中可以塞满元件
所以我从 view controller 写起
6F:→ atst2:你知道什麽是Model-View-Controller吗? 03/13 16:38
帮你修
以前学过,但忘光了,在 wiki 中查了一下,总觉得那样的文字不是很直觉
看来还是得在做中学
※ 编辑: HuangJC 来自: 60.251.197.63 (03/13 17:17)
※ 编辑: HuangJC 来自: 60.251.197.63 (03/13 17:30)
7F:→ atst2:model-资料, controller-流程, view-使用者介面 03/13 17:38
8F:→ atst2:这个pattern可以说是UI程式设计最重要的一环 03/13 17:39
9F:→ atst2:我会建议任何要做程式的人, 都要弄清楚这一块. 03/13 17:41
10F:→ uranusjr:每个 framework 对 MVC 都有自己的想法, 而且常常冲突 03/13 18:32
11F:→ uranusjr:其实要了解的是它的精神, 而不是解释本身 (好像讲得很玄) 03/13 18:34
12F:→ HuangJC:我认同 uranusjr 的讲法,所以这里的 mvc 是什麽... 03/13 18:52
这样说吧, 不管什麽架构,其实都是个建议
但有时 compiler 会有强制要求
就以微软的 MFC/document view 架构来说好了
基本上 document 里放资料, view 放展现函式
那麽不同的 view 去取用同一份资料,就可以有不同的展示
讲得很清楚明白
但是把资料放在 view 里面并不会写不出来
切不漂亮也会动,切得漂亮可读性高;但 compiler 不会插手'不准这样写'
尤其是 single view 根本看不出必要;等有许多不同的 view 都参考同一份资料时
自然会感觉把资料独立出来的好处
那微软的 document 是什麽呢? 或许是它有支援的 API
比如开档存档指令在这,如果你把资料放在 view 里面,就有点怪
目前我对 controller 的用法就是,一堆 protocol 的 implement 放这
元件在 view did load 时动态摆好,要设一些 callback listener
那就集中在 controller 这里吧
但不集中在这当然也写得出来
比如继承 UIView 写的 MyView, 它本身当然也可以是摆放 protocol 本体的地方
不过最近开始理解到,有时根本不必继承就可以写出程式
只要摆放 UIView(应该举 table view 为例),
然放设定好它一些 protocol callback (比如 data Source)就可以了
这是更抽象化的写法,而既然没有继承,函式当然摆在 controller 就好
Compiler 并没强制我把架构怎麽摆,分散在各个 class 一样写得出来
那什麽是它真的强制的呢?
所以我才会以为,一个画面一定要有一个 controller
而 controller 内部有 view....
这是我的基本理解啦
※ 编辑: HuangJC 来自: 60.251.197.63 (03/13 19:25)
※ 编辑: HuangJC 来自: 60.251.197.63 (03/13 20:50)
13F:推 Blueshiva:其实看了你最近在版上的发问和你自己的解释,我觉得你把 03/13 22:50
14F:→ Blueshiva:你以前在别地方的概念都先忘掉比较好...基本上,ObjC和 03/13 22:51
15F:→ Blueshiva:Cocoa是很老,但是设计很先进的东西,照你老是想要把它 03/13 22:52
16F:→ Blueshiva:的行为对应到别的东西上,只会阻碍自己的学习而已 03/13 22:52
17F:→ HuangJC:这和争论要不要把中文忘光再学英文很像啊... 03/13 22:56
18F:→ HuangJC:当然对建议是谢谢,但以後被你发现我没照做,又有肤衍的感 03/13 22:57
19F:→ HuangJC:觉;还不如现在招了:我没很优秀,也没法子砍掉重练... 03/13 22:58
20F:推 Piceman:要不要忘掉是还好,只要别强求这东西应该要这麽做才对就好 03/14 11:59
21F:→ Piceman:例如中文是你好吗,学英文就别问为什麽不是you good how 03/14 12:00
22F:→ uranusjr:You don't need to forget Chinese to learn English, 03/14 12:02
23F:→ uranusjr:but you must not speak English like Chinese. 03/14 12:02
谢谢,我只是怕不长进被发现後就不能再发问了
我也希望有一天可以当回答别人问题的人
以下纯聊天:
当年学完 pascal 再学 c, 学长是说 '学pascal 是 c的基础'
才学完几年就有书支持我的想法,'c 可以直接学,不必先有别的基础'
c 函式生而平等,全部 global
而 pascal 是副程式内有宣告区,宣告区内又可以宣告副程式,也就是天生巢状结构
因此在学到 c++ 的 class 时,我就觉得 pascal 明明天生就有物件性质,
不必来个 pascal++ or object pascal
c 把函数,副程式合称函式
pascal 则是函数一定要有传回值,传回值一定要被接
以上或许有记错
(何况 pascal 演进後也会有 c 的特性,比如引进 precompiler
当年刚学 c 时,书上把 precompiler 说是 c 的特性,利用定义可以造成高度可携性
那时我就觉得,precompiler 根本不必绑在任何语言上,它是独立的工具啊)
但我要强调的是 当时有传回值的函式,在 pascal 一定要被接
这时好玩了,有个学长明明自修先学了 c,但学校要他交 pascal 作业
於是他就 speak pacasl like c XD
比如
int sum = ADD(3,5); 假设 ADD 函式内有某些作用,而我也不在乎传回值时
在 c 可以很自然的写
ADD(3,5);
在 pascal 不可以不接传回值,於是学长就写
int nouse = ADD(3,5); (我忘了 pascal 语法,所以就讲个意思就好)
nouse 就是要丢掉的意思
学长就大量使用函数,而不用副程式了
c 和 pascal 很像但不同
我看过有人写 c 像 pascal,也看过有人写 pascal 像 c XD
没法子,当你脑袋没转过来,但你的环境(团队或学校作业)有限制你工具时
那就这麽蛮干了
-----------
回原题,在 storyboard 写 table & cell 明明很简单
为什麽我会碰到问题? 原来是因为我用 xib
为什麽我要用 xib? 因为团队决定了啊
那我就去 google 出使用的方法....
但等都写完了我才知道,它本来很简单的,我绕了一大圈
※ 编辑: HuangJC 来自: 60.251.197.63 (03/14 13:45)
※ 编辑: HuangJC 来自: 60.251.197.63 (03/14 13:46)