【问题标题】:Different images in table View?表格视图中的不同图像?
【发布时间】:2011-10-02 22:18:46
【问题描述】:

我是论坛的新手,我喜欢一些帮助。我有一个表格视图,我可以通过单独页面上的不同按钮向其中添加单元格。我想让每个按钮添加一个新单元格,但图像不同。举个例子。按钮 1 将添加一个单元格和一个名为 @"button1.png" 的图像 按钮 2 将添加一个带有名为 @"button2.png" 的图像的单元格,依此类推。但是我无法将图像添加到单元格中。我可以在cellForRow 中做到这一点,但不是在按钮方法中。有人可以帮我吗?我在按钮中试过这个:

编辑 用于添加单元格和图像的按钮:

- (IBAction)outlet1:(id)sender {
[cart.cells addObject:@"1"];
[cart.cell.imageView setImage:[UIImage imageNamed:@"paddle1.png"]];
}

cellForRow

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   
(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     
reuseIdentifier:CellIdentifier];
} 
//cell.imageView.image = [UIImage imageNamed:@"paddle1.png"];
[myTableView reloadRowsAtIndexPaths:indexPath.row   
withRowAnimation:UITableViewRowAnimationNone];

cell.textLabel.text = [cells objectAtIndex:indexPath.row];
return cell;
}

【问题讨论】:

    标签: iphone cocoa-touch uitableview uiimageview


    【解决方案1】:

    UITableView 呈现的方式是,它会在即将呈现该行时请求一个单元格,生成它需要的像素,然后忘记该单元格。由于单元格的大部分结构不会因行而异,因此可以重复使用相同的单元格对象来呈现多行,并且只需(例如)更改标签文本或 imageView 的图像。

    因此,在呈现一行后更改单元格不会改变该行的外观。您需要告诉表格重新渲染该行:

    [myTable reloadRowsAtIndexPaths:indexPathArray withRowAnimation:foo];
    

    这将导致操作系统调用 tableView 的数据源委托 cellForRowAtIndexPath: 消息,然后需要创建和/或修改一个单元格,然后渲染该单元格。

    单元格不是行。单元格是用于渲染行的对象。

    【讨论】:

    • 好的,所以当这个方法被调用时,它会重新加载表格的行,并允许我将新图像添加到 tableview 行?另外我应该用什么代替 foo ?非常感谢安德鲁的回复! :)
    • 使用包含要更改的行的索引路径的 indexPathArray 调用该方法。至于'foo',选择一个你想要的行动画,例如UITableViewRowAnimationNone,如果你只想让它立即重绘。查看有关此消息的文档以获取更多信息。
    • 好的,所以我把它放在 cellForRow 中,代码如下:[myTableView reloadRowsAtIndexPaths:indexPath.row withRowAnimation:UITableViewRowAnimationNone];,它仍然不允许添加图片。如果我添加超过 1 个单元格然后尝试转到 tableView 页面,则应用程序崩溃。在这里,您能否阅读我的问题中的代码以修复它并显示我现在拥有的内容。非常感谢大家的帮助!!
    • 第一个参数是一个数组 - 你需要 [myTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 这可能会导致你的崩溃。如果你想要多行,那么使用不同的数组初始化消息。
    • 嘿,安德鲁,我很感激你的帮助,但这不是我想要的。它让我的表格视图做了很多奇怪的事情。你见过 iphone/ipad 的亚马逊应用程序吗?我想要的东西与您将东西添加到购物车以购买它时一样。我希望一个单元格与产品图像一起出现。你能帮我解决这个问题吗?非常感谢!
    【解决方案2】:

    如果我理解这个问题,您希望购物车对象在表格单元格中显示其图片。如果这是真的,那么为什么不向购物车对象添加 UIImage 视图。在适当的时间(用户选择对象的地方)将项目的图像存储到对象的 UIImage 视图中。然后,当您将购物车对象设置到表格中时,您将拥有对象名称(大概)以及它在您的对象中的图像,然后您可以轻松地将单元格的图像 = 设置为您的对象图像。不要尝试在“cellForRowAtIndexPath”方法中显示要显示哪个图像的逻辑。将图像和所有属性与您的对象一起存储,并使用 objectAtIndex 指向您的完整对象并根据您的对象属性设置您的单元格。

    【讨论】:

    • 嘿,非常感谢您的回复!而购物车对象只是一个类的副本。至于在适当的时候添加图像,我的代码不能在上面工作吗?我让用户按下一个按钮,然后在添加单元格/行时添加它?你一直说购物车对象。你这是什么意思?你觉得购物车是什么?因为,我不知道该怎么说,但购物车只是指不同的类
    • 你明白了吗?
    • 是的,我确实做到了,我只是将图像添加到一个数组中,就像单元格的文本一样。而且效果很好!感谢您的帮助!
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多