如何制作自定义tableView单元附件

时间:2011-06-29 18:13:26

标签: objective-c ios uitableview

我还没有找到关于如何做到这一点的任何非常好的例子。有一个图像我想用作附件按钮,当我把它放入并点击它不起作用。所以它看起来正确但不起作用...... 这是我的代码:

[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
cell.accessoryView = [[UIImageView alloc]
    initWithImage:[UIImage imageNamed:@"TableView_Green_Disclosure.png"]];

那么,如果点击它,我如何让我的UIImageView调用accessoryButtonTappedForRowWithIndexPath

4 个答案:

答案 0 :(得分:6)

彻底阅读accessoryViewaccessoryType会发现它们是定制单元格的互斥方式。

设置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完成繁重的工作要容易得多 - 但是,如果你想要一个自定义图形等 - 这是另一条有用的路径。