我有动态tableView和一个问题。在每个tableCell中有两个按钮。 我试图让按钮触及indexPath.row,但没有成功。
我的代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [self.homeTableView indexPathForSelectedRow];
NSLog(@"%d", indexPath.row);
}
我怎样才能获得indexPath.row for touced按钮(Segue连接通过这两个按钮 - >两个连接)?
答案 0 :(得分:10)
它不起作用,因为单击按钮时没有选择行。
使用两个按钮,我会断开你的segue与按钮,并在IB中做2个手动segue,然后添加这样的代码来处理它们:
-(void)button1Pressed:(id)sender {
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *clickedButtonIndexPath = [self.homeTableView indexPathForCell:clickedCell];
...
[self performSegueWithIdentifier:@"YourManualSegueIdentifier1" sender:self];
}
编辑第二个选项:
在MyTableViewCell.h中:
@interface MyTableViewCell : UITableViewCell
...
@property (strong, nonatomic) NSIndexPath *cellIndexPath;
...
@end
在MyTableViewCell.m中:
-(void)button1Pressed:(id)sender {
...
NSInteger row = cellIndexPath.row;
...
}
在MyTableViewController.m中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// remember index here!
[cell setCellIndexPath:indexPath];
....
return cell;
}
答案 1 :(得分:10)
Apple更改了iOS 7中的UITableViewCell层次结构
使用iOS 6.1 SDK
<UITableViewCell>
| <UITableViewCellContentView>
| | <UILabel>
使用iOS 7 SDK
<UITableViewCell>
| <UITableViewCellScrollView>
| | <UITableViewCellContentView>
| | | <UILabel>
因此,如果您想在按钮索引处获取indexpath,请使用以下代码 使用iOS 6或更高版本的SDK
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *clickedButtonPath = [book_table indexPathForCell:clickedCell];
NSLog(@"index=%@",clickedButtonPath);
使用iOS 7或7+ SDK
UITableViewCell *clickedCell = (UITableViewCell *)[[[sender superview] superview]superview];
NSIndexPath *clickedButtonPath = [book_table indexPathForCell:clickedCell];
NSLog(@"index=%ld",(long)clickedButtonPath.item);
答案 2 :(得分:6)
我没有使用故事板但是一旦我在简单的基于viewconroller的项目中做到了,我认为这可能对你有所帮助。
- (IBAction)goToNew:(id)sender
{
UIButton *btn = (UIButton*) sender;
UITableViewCell *cell = (UITableViewCell*) [btn superview];
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
int row = indexPath.row;
}
答案 3 :(得分:1)
可能触摸UIButton而不是UITableView / UITableViewCell。
检查:
NSLog(@"%@",[sender class]);
答案 4 :(得分:0)
解决了button.tag
在“cellForRowAtIndexPath”中我设置了button.tag = indexPath.row然后在“ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {“
UIButton *btn = (UIButton*) sender;
NSLog(@"%d", btn.tag);
答案 5 :(得分:0)
按钮tag = indexpath.row+100;
并获得..
-(IBAction)ShowListView:(id)sender
{
UIButton *btn = (UIButton *)sender;
int Iindex = btn.tag-100;
NSLog(@"button title is %@",btn.titleLabel.text);
NSLog(@"button id is %d",Iindex);
NSLog(@"array category is....%@",arrayCategory);