作者leondemon (狗狗)
看板MacDev
标题[问题] registerNib:forCellReuseIdentifier:
时间Thu Aug 1 18:50:51 2013
我有个 .xib 档,是要客制化 TableViewCell 的
Interface Builder 内的 File Owner 及 该 cell 都有设定为我的 custom class
然後我利用 table view的 registerNib:forCellReuseIdentifier:
来注册一个 reuseID 及对应的 nib
问题出在 dataSource 的地方
我利用 table view 的 -dequeueReusableCellWithIdentifier: 来得到一个 cell
table view 却给我一个 UITableViewCell 而非我的 custom class
但是 cell 的 UI 介面,的确跟我 nib 档内的设置是一样的
但这样我就没有 customized cell 的功能了...
请问是我哪里有弄做什麽?
还是 -dequeueReusableCellWithIdentifier: 的问题 只会回传 UITableViewCell?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.125.199
1F:推 kiii210:(yourCustomCell *)[tableview dequeueReuse....]; 08/01 19:25
2F:→ kiii210:yourCustomCell *cell = [tableview dequeueReusable...]; 08/01 19:26
这边宣告回传物件为某个型别 也无法改变该物件原本类别的事实...
NSLog(@"cell class: %@", NSStringFromClass([cell class]));
会printt出"UITableViewCell"
3F:→ kiii210:= =我到底在打什麽 08/01 19:26
4F:→ kiii210:你有照我第二行打的那样打吗?你是要在哪里用到cell? 08/01 19:27
5F:→ kiii210:cellForRowAtIndexPath? 08/01 19:28
6F:→ kiii210:你的cell要是你自己的Custom Cell的class才行唷 08/01 19:39
// data source
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CustomizedCell *cell = [tableView dequeueReusableCellWithIdentifier:id];
NSLog(@"cell: %@", cell); // 此时cell会存在 而且的确是load Nib的UI
// 但是class一直都是UITableViewCell;
if (!cell){
NSLog(@"永远不会进来,因为我已用registerNib:forCellReuseIdentifier:");
// 以前dequeue没有cell的话 要在这边手动自己create cell
// 可以用 alloc-init 或是在这边用 nib file 来创造 cell
// 但实际上只要register该reuse identifer,dequere时一定有cell
// UIKit会根据register的Nib或class 来产生该cell
// 所以这边if statement不会通过 其实这边不用写code
// 只是好像-dequeueReusableCellWithIdentifier: 创造出来的cell
// 都是UITableViewCell... (无论我Nib设file owner/cell的class 都无效)
// 不知道真的是bug 还是我漏掉设定什麽?
}
return cell;
}
※ 编辑: leondemon 来自: 114.198.184.235 (08/02 00:23)
7F:推 kiii210:这要等高手啦 XD 08/02 09:46
8F:→ kiii210:你的意思是,你的cell底下没有你自己CustomCell的object? 08/02 09:47
9F:→ kiii210:等高手来之前 要不要把完整code丢上来看看 08/02 09:51
後来我找到问题了 虽然不知道是怎麽回事
因为 Xcode 在 subclass UITableViewCell 时 没有同时产生 xib档的选项
所以必须自己手动加入一个 .xib 档
而当初创造该 xib 档时 从清单中选了empty的选项 才会发生此事
(想说也不是要customize UIView/UIWindow 直接从空白的开始设定)
後来重新建立 .xib 新档时 选了 View 的 xib 选项
然後把该 view 给删除掉之後 重新加入一个 table view cell
这样在 register 之後 就会确实产生我设定的类别物件
只不过我还是不知道 empty 的 xib 档是要拿来做什麽用的...
还是 empty 的 xib 档还要设定什麽地方 才能拿来给 table view register?
※ 编辑: leondemon 来自: 118.163.125.199 (08/02 14:03)
11F:推 kiii210:你有连Files Owner的view outlet出去吗? 08/02 15:23