作者johnlinvc (阿翔)
看板MacDev
标题Re: [问题] Custom Cell的几个问题
时间Tue May 15 11:11:57 2012
※ 引述《tref (MFDA)》之铭言:
: 各位大大,小弟想请教2个问题:
: 1.当我 Custom Cell 时,但若到 DetailViewController 去修改Array的内容後 ,
: 返回上一页 Cell 显示的却还是修改之前的内容,有确认Array的内容无误
: aArray、bArray...等皆为NSMutableArray,请问到底是那里出错了??
因为你的reuse 有点问题
: 2.当Cell资料较多时,超出一个页面所能呈现出的资料,EX:超过21笔 ,将画面
: 上下卷动会出现其他资料没错,但资料的排序会乱掉,点选乱掉的资料进入
: DetailViewController也与Cell所呈现的资料不相符
: 请问各位到底是什麽问题?找不出原因苦恼中.....
: 谢谢
: Code如下:
: - (void)viewWillAppear:(BOOL)animated
: {
: [super viewWillAppear:animated];
: [self.tableView reloadData];
: }
到这里没太大问题
: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
: {
: static NSString *CellIdentifier = @"Cell";
: //增加LABEL
: UILable *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(105.0, 10, 125, 22.0)];
: [aLabel setText:[NSString stringWithFormat:@"%@",[aArray objectAtIndex:indexPath.row]]];
: UILable *bLabell = [[UILabel alloc] initWithFrame:CGRectMake(500.0,10.0, 125, 22.0)];
: [bLabell setText:[NSString stringWithFormat:@"%@",[bArray objectAtIndex:indexPath.row]]];
: UILable *cLabel = [[UILabel alloc] initWithFrame:CGRectMake(360.0, 10, 125, 22.0)];
: [cLabel setText:[NSString stringWithFormat:@"%@",[cArray objectAtIndex:indexPath.row]]];
: UILable *dLabel = [[UILabel alloc] initWithFrame:CGRectMake(230.0, 10, 125, 22.0)];
: [dLabel setText:[NSString stringWithFormat:@"%@",[dArray objectAtIndex:indexPath.row]]];
: UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
问题出在这,你alloc了一些label,设定了label的字串。
然後呼叫reuse,问题在於如果reuse成功,就不会加label到cell,
所以字串也没设定到。
update:还有你的label拼错了,我刚刚也拼错XD
: if (cell == nil) {
: cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
: [[cell contentView]addSubview:aLabel];
: [[cell contentView]addSubview:bLabell];
: [[cell contentView]addSubview:cLabel];
: [[cell contentView]addSubview:dLabel];
: }
: return cell;
: }
比较好的方法是subclass UITableViewCell。
不过这里提供一个比较hacky的方法。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * identifier = @"YouShouldSubclassIt";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
//alloc & init cell
//alloc & init labels
//这边比较tricky 把labels 设tag
aLabel.tag = 1;
bLabel.tag = 2;
//add subview
}
UILabel * aLabel = (UILabel *)[cell viewWithTag:1];
UILabel * bLabel = (UILabel *)[cell viewWithTag:2];
a.text = @"what you want for a";
b.text = @"what you want for b";
return cell;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.223.100
※ 编辑: johnlinvc 来自: 220.128.223.100 (05/15 11:21)
1F:推 tref:真的是这样,而且连问题2也一并解决,实在是太感谢了 <_O_> 05/15 12:27
fix typo
※ 编辑: johnlinvc 来自: 220.128.223.100 (05/15 14:10)