更改 uitableviewcell 中的自定义附件视图?

Posted

技术标签:

【中文标题】更改 uitableviewcell 中的自定义附件视图?【英文标题】:Changing a custom accessoryView in a uitableviewcell? 【发布时间】:2010-05-20 15:55:34 【问题描述】:

我正在尝试在用户单击单元格后立即更改 uitableviewcell 的自定义附件视图。我该怎么做?

为了记录,我正在使用 Matt Gallagher 的自定义表格视图教程:

http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

来源下载链接:http://projectswithlove.com/projects/EasyCustomTable.zip


编辑

尝试了此代码,但它只是在修饰后更改了配件。还尝试了 willSelectRowAtIndexPath ,结果相同。

- (NSIndexPath *)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UIImage *indicatorImage = [UIImage imageNamed:@"indicatorSelected.png"];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryView = [[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
    return indexPath;
 

编辑

通过使单元格的背景图像包含附件来解决问题。所以配件是通过将其作为图像的一部分来“伪造”的

【问题讨论】:

【参考方案1】:

也许你可以尝试重新加载 willSelectRowAtIndexPath/didSelectRowAtIndexPath 中的单元格:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UIImage *indicatorImage = [UIImage imageNamed:@"indicatorSelected.png"];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryView = [[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:NO];
 

另一个建议: didSelectRowAtIndexPath 返回 void 而不是 NSIndexPath。

【讨论】:

willSelectRowAtIndexPath 返回 NSIndexPath*,而不是 void。 你说得对。这是我对willSelectRowAtIndexPath 的错误(已编辑)。但是didSelectRowAtIndexPath 返回无效。 您只是 -1 是因为 (willSelectRowAtIndexPath) 的这个错误建议还是 在实施示例中也有错误【参考方案2】:

您可以在选择方法中更改附件视图,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryView = newView;

这只是抓取当前选中的单元格,然后更改它的附属视图。您的视图对象将位于 newView 所在的位置。

【讨论】:

【参考方案3】:

使用 UIImageView 的 highlightImage 属性:

UIImageView* arrowView = [[UIImageView alloc] initWithImage:normalImage];
arrowView.highlightedImage = selectedImage;
cell.accessoryView = arrowView;
[arrowView release];

【讨论】:

以上是关于更改 uitableviewcell 中的自定义附件视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITableViewCell 中的自定义 UIButton 中删除触摸延迟

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

在 Storyboard 中设计的自定义 UITableViewCell 中的自定义 UIView

MonoTouch 中的自定义 UITableViewCell

UITableViewCell 中的自定义 UISwitch

自定义 UITableViewCell 中的自定义 UIView