在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
其他问题涉及如何知道搜索时选择的实际单元格,但这不是我的问题。
谢谢。
答案 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]