2011-11-17 68 views
1

我有一个UITableView的自定义单元格。单元格中有一个名为ShowData的按钮。我为该按钮添加了一个选择器:addTarget:action:forControlEvents:你可以传递一个字典或任何东西

[cell.ShowData addTarget:self action:@selector(ShowData:) forControlEvents:UIControlEventsTouchUpInside]; 

在My ShowData:方法中,我想要一些用于显示单元格的信息。我怎样才能以这种方式传递信息?谢谢。

回答

0

您的showData:将收到按钮本身作为其参数sender。您可以遍历按钮的超级视图,直到找到自定义单元格,然后访问已添加到单元格的任何属性。

- (IBAction)showData:(id)sender 
{ 
    while (sender && ![sender isKindOfClass:[MyCustomTableViewCell class]]) 
     sender = [sender superview]; 
    if (!sender) { 
     // error 
    } 

    MyCustomTableViewCell *cell = sender; 
    // do stuff using cell 
} 
+0

很糟糕,发现这是在像这样的选择器上传递额外数据的唯一方法。这肯定不是最佳做法。这真的是每个人都这样做吗? – binnyb

+0

@rob mayoff如何在代码中执行此操作?现在我只是得到我的[button superview],然后我发现它是我以前没见过的UITableViewCellContentView类型。我试图调用superview,但我得到未声明的标识符UITableViewCellContentView的错误。我不知道什么是一个好的循环来自动化这将是?谢谢。 –

+0

我修改了我的答案。 –

0

在这种情况下,我通常对按钮进行子类化并添加一个ivar来识别它与UITableViewCell。

例如,你可以有两个NSInteger的性质,buttonIndex和buttonSection,以确定您的按钮是在tableview中的部分和行。

当你构建的cellForRowAtIndexPath你的,你可以分配indexPath.row将buttonIndex和indexPath.section复制到buttonSection。现在

,在你showData方法,刚读发件人作为您的自定义按钮,访问这些属性:)

编辑:

你可以很简单地设置button.tag = indexPath.row如果您使用的是单节tableview。 UIButton继承自UIView,它具有专门用于该目的的标签属性。

相关问题