我还没有找到关于如何做到这一点的任何非常好的例子。有一个图像我想用作附件按钮,当我把它放入并点击它不起作用。所以它看起来正确但不起作用...... 这是我的代码:
[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
cell.accessoryView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"TableView_Green_Disclosure.png"]];
那么,如果点击它,我如何让我的UIImageView调用accessoryButtonTappedForRowWithIndexPath
?
答案 0 :(得分:6)
彻底阅读accessoryView
和accessoryType
会发现它们是定制单元格的互斥方式。
设置accessoryType
将导致在点击时调用表视图委托方法。
设置accessoryView
将忽略accessoryType
的设置,并为您提供显示内容。如果您希望从自定义视图中收到回调,那么它应该是一个连接的控件。 (或任何带有手势识别器的视图。)
如果您使用按钮,并将其操作设置为accessoryTapped:
,您将收到按钮作为“发件人”参数。您可以向上查看视图层次结构,直到找到表格视图单元格,然后询问表格视图该单元格的indexPath是什么。然后,这将为您提供模型对象的索引,并且您可以对其进行适当的操作。
替换该按钮,您可以在上面的UIImageView上启用交互,并为其添加手势识别器。
答案 1 :(得分:2)
要使按钮实际执行某些操作,您需要从UITableViewDelegate实现- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
。
当连续点击一个附件按钮时,将调用此方法,您将有机会使用传入的索引路径进行适当的操作,以确定点击了哪一行的附件。
答案 2 :(得分:1)
查看博客文章hdr-> cmdline,以便为UITableView
创建自定义附件视图。
作者使用UIButton
个对象和图像进行自定义附件视图。
答案 3 :(得分:0)
要使用accessoryView - 您需要将单元格的accessoryType设置为UITableViewCellAccessoryNone,将UIButton(带有相关图像)存入单元格,然后将其连线以接收用户触摸。你可能会使用类似下面代码的东西作为对被触摸的单元格UIButton的IBAction响应:
- (IBAction) accessoryButtonPressed:(id) sender
{
NSUInteger pathInts[] = { 0,0 };
pathInts[1] = self.currentselectedrow; // ivar set when tableview row last selected
NSIndexPath* indexPath = [NSIndexPath indexPathWithIndexes:pathInts length:2];
[self tableView:mytableview accessoryButtonTappedForRowWithIndexPath:indexPath];
}
UIButton将通过tableview的“cellForRowAtIndexPath:”函数中的一行来连接执行此粘合代码
[thecell setButtonTarget:self action:@selector(accessoryButtonPressed:)];
我注意到的一件事是,UIButton似乎想要一个“向右滑动”而不是简单的“轻敲”触摸来触发事件 - 但它可能是我的beta iOS问题。请注意,我已将名为“cell_accessoryButton”的UIButton *对象添加到自定义单元格源。
在单元格的源代码中,您将使用以下代码支持“setButtonTarget”调用:
- (void) setButtonTarget:(MyViewController*)inTarget action:(SEL) inAction
{
[self.cell_accessoryButton addTarget: inTarget
action: (SEL) inAction
forControlEvents: UIControlEventTouchUpInside];
}
使用accessoryType参考并让iOS完成繁重的工作要容易得多 - 但是,如果你想要一个自定义图形等 - 这是另一条有用的路径。