UITableview单元格中的单击按钮在搜索时给出错误的结果

时间:2017-07-08 11:00:31

标签: ios objective-c uitableview

在tableview的单元格中,我有一个按钮。该按钮基本上打开了单元格引用的文件。搜索未启用时,此工作正常。但是当搜索开启时,我似乎无法在搜索结果数组中获得正确的行。 这是我到目前为止所尝试的: 在cellForRowAtIndexPath中我标记了按钮。

myDownloadsBtn = (UIButton *) [cell viewWithTag:106];

动作设置如下:

[myDownloadsBtn addTarget:self action: @selector(downloadClicked:event:) forControlEvents:UIControlEventTouchUpInside];

然后在downloadClicked中我有以下

    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    NSString *todoRow;
    CGPoint currentTouchPosition = [touch locationInView:self->tableview];
    NSIndexPath *indexPath = [self->tableview indexPathForRowAtPoint: currentTouchPosition];

但是它给了我VISIBLE当前位置的indexPath,而不是搜索结果数组中行的位置。

此外,我的委托方法ofdidSelectRowAtIndexPath在搜索和不搜索时都能正常工作。它只适用于单元格内的按钮。

我找到了这个问题,但没有答案: how to get selected tableview button value while search in iOS

其他问题涉及如何知道搜索时选择的实际单元格,但这不是我的问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

哟可以将标签分配给按钮

[myDownloadsBtn setTag:indexPath.row];

并在downloadClicked操作中访问标签,因此触摸的行的索引/按钮单击

-(IBAction)myDownloadsBtn:(id)sender
 {
   UIButton *tappedBtn = (UIButton*)sender;
   Nslog("%d",tappedBtn.tag); // Get tag hence indexpath of tableview in which button is clicked. 
  }

您需要使用搜索结果数组重新加载表数据。

希望它有所帮助。快乐编码!!

答案 1 :(得分:1)

要识别tebleview特定索引上的对象,您需要将特定的indexpath.row标记为UIButton

这是最好的方法。

aCell.yourButton.tag = indexPath.row

[aCell.yourButton addTarget:self action: @selector(downloadClicked:event:) forControlEvents:UIControlEventTouchUpInside];

之后你需要处理这个事件

-(IBAction)myDownloadsBtn:(id)sender
 {
   UIButton *tappedBtn = (UIButton*)sender;
   Nslog("%d",tappedBtn.tag); // it gives index of object related to your cell
 }

但是你说的是在执行搜索后你没有得到正确的结果。 我的想法是,在从搜索中获得结果后,您需要使用

重新加载tableview
[yourTableView reloadData]