我正在尝试插入一个自定义图像作为UITableView单元格的accessoryView。然而,我有一个有趣的效果:首先,图标插入任意两个单元格,然后当我向上滚动时,所有图标都消失,图像只显示在底部单元格上,一旦下一个图像滚动显示就会消失。这是我正在使用的代码:
NearCell *cell = [myTableView dequeueReusableCellWithIdentifier:CellIdentifier];
nearContents* contents=[[self sourceForTableKind:tableView==self.myTableView favorites:NO] objectAtIndex:indexPath.row];
cell.bus.text=contents.bus;
cell.destination.text=contents.destination;
cell.selectionStyle=UITableViewCellAccessoryDetailDisclosureButton;
cell.accessoryView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pinPoint"]];
return cell;
在UITableViewCell子类nearCell中我有:
- (void)layoutSubviews {
[super layoutSubviews];
CGRect accessoryFrame = self.accessoryView.frame;
accessoryFrame.size.height = self.frame.size.height;
accessoryFrame.size.width = self.frame.size.height;
accessoryFrame.origin.y=self.frame.origin.y+21;
accessoryFrame.origin.x=self.frame.origin.x+self.frame.size.width- accessoryFrame.size.width-5;
self.accessoryView.frame = accessoryFrame;
}
我还试图懒洋洋地分配accessoryView,认为问题可能与重复分配有关,但如果我在所有单元格中使用相同的图像,则图像不会完全显示。
事情就是这样,图标就在最后一个单元格中: :
我还将它安装在另一个tableView中,由于某种原因,子类的layoutSubview没有被调用,并且accessoryViews经常出现在所有单元格上,尽管大小不正确。因此,即使我忽略了它可能是什么,问题似乎仍然存在于layoutSubview回调中。 但是,在这两种情况下的问题是,在触摸图像时不会调用accessoryButtonTappedForRowWithIndexPath回调,而是调用didSelectRowAtIndexPath回调。
答案 0 :(得分:0)
实际上,当我分配layoutSubviews回调(通过手动调整图像大小)时,即使在原始表格上也能正确显示所有图像。唯一持久的问题是在单击图像时不会调用accessoryButtonTappedForRowWithIndexPath。
答案 1 :(得分:0)
我发现这个解决方案也解决了附件回调问题: Using a custom image for a UITableViewCell's accessoryView and having it respond to UITableViewDelegate
我实际上是用块来管理问题,以便传递一些内部参数。这是最终的解决方案:
nearContents* contents=[[self sourceForTableKind:tableView==self.myTableView favorites:NO] objectAtIndex:indexPath.row];
cell.bus.text=contents.bus;
cell.destination.text=contents.destination;
cell.selectionStyle=UITableViewCellAccessoryDetailDisclosureButton;
cell.accessoryView=button;
[self registerButton:button blockForKind:tableView==self.myTableView favorites:NO];
-(void) registerButton:(UIButton*)button blockForKind:(BOOL)normal favorites:(BOOL)favorites{
[button addEventHandler:^(id sender, id event) {
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.myTableView];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint: currentTouchPosition];
if (indexPath != nil)
{
[self tableView: self.myTableView accessoryButtonTappedForRowWithIndexPath: indexPath];
}
}
forControlEvents:UIControlEventTouchUpInside];
}