您好我是IOS新手,正在尝试使用详细信息应用程序处理表格视图。我正在使用一个全新的macbook air和Xcode 6.但是,我一直注意到在显示构建时莫名其妙地消失或出错的事情。我试过清洁无济于事。
我没有更改下面的代码显示子视图和右边的图像,但现在只显示头部,不再是子标题或任何一个图片,子视图中的标准图像和我添加的右图像。该程序是否只是错误或者在我没注意到的情况下在我的代码中出现了什么?
我唯一做的就是在一个单独的细节控制器中,添加了一个图像插座属性和另一个属性都没有抛出警告,但为什么会搞乱tableviewcontroller场景呢?
以下是工作表的代码,但现在不显示子文本或图像,但显示头部:
static NSString *protoCell = @"Cell";
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:protoCell forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.text = @"head";
cell.detailTextLabel.text = @"sub";
cell.imageView.image = [UIImage imageNamed:@"pic.png"];
UIImageView *rightimage;
rightimage = [[UIImageView alloc] initWithFrame:CGRectMake(225.0,0.0,80.0,45.0)];
rightimage.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:rightimage];
rightimage.image = [UIImage imageNamed:@"pic.png"];
CGSize itemSize = CGSizeMake(40, 40);
UIGraphicsBeginImageContextWithOptions(itemSize, NO, UIScreen.mainScreen.scale);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[cell.imageView.image drawInRect:imageRect];
cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.imageView.layer.masksToBounds=YES;
cell.imageView.layer.cornerRadius=20.0;
cell.imageView.frame = CGRectMake(20, 20, 500, 50);
return cell;
}
答案 0 :(得分:2)
您的代码有很多问题。主要的是你忘记了细胞再利用。你在说
[cell.contentView addSubview:rightimage];
cellForRowAtIndexPath:
的每次调用。但是对于相同的单元,这被多次调用,因为单元格被重用。因此,如果表中有100行,则最终可以在同一单元格中使用100(或1000或10000)个rightImage
副本。
另外,你这样说:
cell.textLabel.text = @"head";
cell.detailTextLabel.text = @"sub";
[cell.contentView addSubview:rightimage]; // ???
您不应该将内置的textLabel
和detailTextLabel
与您自己的其他子视图混合在一起。
所以基本上外卖消息是:如果你想自定义一个单元格的内容,而不是只使用内置的textLabel
和detailTextLabel
,那么你需要停下来然后回去学习如何做到这一点。
哦,还有一件事。你说:
我一直注意到在构建
时出现莫名其妙的消失或出错的事情
没有。停止。事情并非莫名其妙地发生。如果你怀疑神秘的力量潜入并弄乱东西,如宇宙射线,你就不会学会编程。如果您的代码中断了,您就破坏了它。学会面对这样一个事实,即如果您的代码没有按预期运行,您做错了什么。除非你接受这种思维方式,否则你永远不会成为一名优秀的程序员。