Ios 行返回最后一个可见的单元格,并且未调用didSelectRowAtIndexPath

Ios 行返回最后一个可见的单元格,并且未调用didSelectRowAtIndexPath,ios,objective-c,uitableview,tableviewcell,didselectrowatindexpath,Ios,Objective C,Uitableview,Tableviewcell,Didselectrowatindexpath,我有一个NSArray和一个tableView,其中有一些按钮,它们的标题是当前行数组中的字符串 - (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexpath { _selectedRow = indexpath.row; static NSString *simpleTableIdentifier = @"customCell"; cell = [myT

我有一个NSArray和一个tableView,其中有一些按钮,它们的标题是当前行数组中的字符串

- (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexpath {

 _selectedRow = indexpath.row;
 static NSString *simpleTableIdentifier = @"customCell";
 cell = [myTableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

 if (cell == nil) {
  cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
 }

 [cell.playButton setTitle:array[indexpath.row] forState: UIControlStateNormal];

 return cell;

}
按钮标题显示得很好

现在我有一些mp3文件,它们的名称与数组中的字符串相同,我想播放与所选单元格对应的文件

fileToPlay = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", array[_selectedRow]]; ofType:@"mp3"];
这里发生的事情是,播放的文件总是与表中最后一个可见单元格对应的文件

我也有

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexpath {
 _selectedRow = indexpath.row;
}
但是如果我尝试在此处打印所选的显示,则日志中不会显示任何内容

当我点击表格中的一个单元格时,它似乎没有被选中(它不是灰色的)

数据源和委托也与tableview连接良好

更新


我发现如果我点击按钮,就好像我没有点击选中的行一样。如果我单击单元格(按钮外),indexPath.row是正确的。

尝试以下方法:

1) 将myGestureRecognizer.cancelsTouchInView设置为false。。。也许你的触碰妨碍了我。(当您可能有手势识别器时,这是一个常见问题)

2) 在tableView属性的检查器中,将选择设置为singleton。这解决了我的问题

3) 设置此:[tableView SetAllowSelection:是]

试试这些:

1) 将myGestureRecognizer.cancelsTouchInView设置为false。。。也许你的触碰妨碍了我。(当您可能有手势识别器时,这是一个常见问题)

2) 在tableView属性的检查器中,将选择设置为singleton。这解决了我的问题


3) 设置此:[tableView SetAllowSelection:是]

cellforrowatinexpath
方法中删除以下行

 _selectedRow = indexpath.row;

每次调用
CellForRowatineXpath
时,您都要设置
\u selectedRow
值,这是在绘制每个单元格时,并解释为什么要获取最后一个单元格的值。

CellForRowatineXpath
方法中删除以下行

 _selectedRow = indexpath.row;
每次调用
CellForRowatineIndexPath
时,您都要设置
\u selectedRow
值,这是在绘制每个单元格时进行的,并解释了获取最后一个单元格值的原因。

设置代码:

 - (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexpath {
 cell.playButton.tag = indexpath.row;
[cell.playButton addTarget:self action:@selector(btnPlay:) forControlEvents:UIControlEventTouchUpInside];
}
- (IBAction)btnPlay:(id)sender{
    UIButton *btn = (UIButton *)sender;
    _selectedRow = btn.tag;
}
您正在为触摸颜色集选择选择颜色。 设置代码:

 - (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexpath {
 cell.playButton.tag = indexpath.row;
[cell.playButton addTarget:self action:@selector(btnPlay:) forControlEvents:UIControlEventTouchUpInside];
}
- (IBAction)btnPlay:(id)sender{
    UIButton *btn = (UIButton *)sender;
    _selectedRow = btn.tag;
}
您正在为触摸颜色集选择选择颜色。

尝试以下操作:将myGestureRecognizer.cancelsTouchInView设置为False为什么要添加_selectedRow=indexpath.row;在cellForRowAtIndex中?您确定在选择单元格时会调用
didSelectRowAtIndexPath
?它可能根本没有被选中,这将使您的
_selectedRow
成为加载的最后一个单元格(向下滚动时为底部,向上滚动时为顶部…);[cell.playButton addTarget:self action:@selector(playAction:)for controlEvents:UIControlEventTouchUpInside];我发现如果我点击按钮,就好像我没有点击选中的行一样。如果单击单元格(按钮外),indexPath.row是正确的。请尝试以下操作:将MyGestureRecognitor.cancelsTouchInView设置为False为什么要添加_selectedRow=indexPath.row;在cellForRowAtIndex中?您确定在选择单元格时会调用
didSelectRowAtIndexPath
?它可能根本没有被选中,这将使您的
_selectedRow
成为加载的最后一个单元格(向下滚动时为底部,向上滚动时为顶部…);[cell.playButton addTarget:self action:@selector(playAction:)for controlEvents:UIControlEventTouchUpInside];我发现如果我点击按钮,就好像我没有点击选中的行一样。如果单击单元格(按钮外),indexath.row是正确的。好的,请执行以下操作:在didselectrowatindexpath处设置断点。检查该方法是否被调用问题是,如果没有调用didselectrowatindexpath,则_selectedrow的值不会更改,因此您选择的不是他们所强调的。好的,执行此操作:在didselectrowatindexpath设置断点。检查该方法是否被调用问题是,如果没有调用didselectrowatindexpath,则_selectedrow的值不会更改,因此您选择的不是他们强调的是,我只是在尝试。但这里的问题是,当我点击单元格中的按钮时,我实际上没有点击单元格,因此selectedRow没有更新。如果我点击单元格(按钮外),它就是。你真的需要按钮吗?按钮似乎正在消耗触摸事件。您可以尝试设置按钮。userInteractionEnabled=NO;在单元格内的按钮上?我需要它来播放音频您不能使用didSelectRowAtIndexPath方法来播放音频吗?是的,我只是添加了_selectedRow=indexPath.row;[自我陶醉];选择rowatindexpath。谢谢是的,我只是想试试。但这里的问题是,当我点击单元格中的按钮时,我实际上没有点击单元格,因此selectedRow没有更新。如果我点击单元格(按钮外),它就是。你真的需要按钮吗?按钮似乎正在消耗触摸事件。您可以尝试设置按钮。userInteractionEnabled=NO;在单元格内的按钮上?我需要它来播放音频您不能使用didSelectRowAtIndexPath方法来播放音频吗?是的,我只是添加了_selectedRow=indexPath.row;[自我陶醉];选择rowatindexpath。谢谢