模态segue需要2点击而不是一个

我的UITableView需要2次点击来显示所选单元格的细节页面:一个用于select,另一个用于显示详细视图。 我想要一个点击直接显示点击单元格的细节视图。

我在我的UITableViewManager.m中使用这个方法的模态segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [playerList indexPathForSelectedRow]; TCPlayerStat *object = _objects[indexPath.row]; [[segue destinationViewController] setPlayerStat:object]; } } 

我不能用push segue工作,因为我没有导航控制器(并且不太想)。

我查看过TableView属性检查器,但没有find任何相关的东西。 我select了select“单选”并选中“显示select”。 我不知道这是否可能,如果是,在哪里看..

谢谢你的帮助。


编辑1:当我写这样的两个方法,它仍然无法正常工作(需要2次点击),我有一个新的警告日志:

“警告:尝试在TCRootViewController上显示TCDetailViewController:0xa27b900:0xa24f050演示文稿正在进行中!

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"showDetail" sender:self]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [playerList indexPathForSelectedRow]; TCPlayerStat *object = _objects[indexPath.row]; TCDetailViewController *detailViewController = [segue destinationViewController]; [detailViewController setPlayerStat:object]; } } 

编辑2:我不知道为什么,但有时它完美的作品,不需要第二次点击表视图。 找不到:/


以下解决scheme

我找出问题所在!

我改变了故事板上的一个我不应该拥有的参数。 我希望select单元格不要显示背景突出显示的颜色,但是看起来Segue是基于它来正常工作的。

如何修复:在故事板中,在导航器中select您的表格视图单元格,并且不要在“select”(属性检查器)中select“无”选项。 “蓝色”,“灰色”或“默认”似乎很好。

我已经有select属性设置为“默认”,并仍然遇到双击问题。 然而,这个build议确实提出了一个相关的解决办法。 在didSelectRowAtIndexPath中,调用:

 self.tableView.deselectRowAtIndexPath(indexPath, animated: false) 

(显然,我正在使用Swift。)

使用

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

代替

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

然后,您可以编写任何代码,并在第一次点击时工作。

仅供参考。 直到现在,使用Xcode 8.2.1和Swift 3.x,我的自定义的UICollectionViewCell子类也存在这个问题(但是我想子类不需要重现这个问题,我没有时间去testing这个例子)。

我总结了这个问题: 点击先前select的单元格将消耗点击事件,导致取消select,而不是预期触发select赛格。

所以解决的办法是,或者不使用select继续,而是使用以编程方式触发继续,或者在触发select继续时取消select该单元本身。