我在UITableViewCell中有一个UIButton ... 我想对UIButton进行一次动作..
我需要将数据发送到为此按钮注册的@selector方法,以便我可以在用户按下此按钮时执行操作。
如何实现这一点,尽管我发现选择器函数中的(id) sender
参数并不总是在cellForRowAtIndexPath
函数中创建的原始按钮。
在cellForRowAtIndexPath
函数内:
UIImage* pdfImage = [UIImage imageNamed:@"icon_pdf.png"];
UIButton* pdfButton = [UIButton buttonWithType:UIButtonTypeCustom];
[pdfButton setImage:pdfImage forState:UIControlStateNormal];
pdfButton.accessibilityHint = @"path/to/pdf/file";
pdfButton.frame = CGRectMake(0, 0, 40, 40);
[pdfButton addTarget:self action:@selector(openUrlInBrowser:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = pdfButton;
这是发件人功能:
-(void) openUrlInBrowser:(id)sender
{
NSLog(@"%@", [sender class]);
NSString * url=[sender accessibilityHint];
NSLog(@"%@",url);
NSLog(@"%@",sender);
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}
答案 0 :(得分:1)
希望我能正确理解这个问题 - 我通常在uitableview中添加的按钮上定义一个标记,该标记是行的索引。在cellForRowAtIndexPath中:
[button setTag:indexPath.row];
然后你可以在目标方法中取回它:
- (void) showdatabases:(id) sender {
int row = [[sender valueForKey:@"tag"] intValue];
...
使用以下方法查询单元格中的值以供处理:
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
或者你可以通过访问发件人的超级视图获得相同的结果,但我发现这更难以调试。
答案 1 :(得分:0)
我更喜欢使用:
-(void) openUrlInBrowser:(id)sender
{
UIButton * button = (UIButton *)sender;
NSString * url=[button.superview accessibilityHint];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}
它不依赖于表格中的单元格位置