Ios 无法在UITableViewController中选择UITableView的行

Ios 无法在UITableViewController中选择UITableView的行,ios,objective-c,iphone,uitableview,uiviewcontroller,Ios,Objective C,Iphone,Uitableview,Uiviewcontroller,我已经使用情节提要创建了一个应用程序。在其他屏幕中,我直接使用了UITableViewController,选择工作正常 在本例中,我有一个UITableView,它是UIViewController中的几个控件之一 我的自定义ViewController.h文件的定义与以下类似: @interface MyViewController : UIViewController <UITableViewDelegate,UITableViewDataSource> @proper

我已经使用
情节提要创建了一个应用程序。在其他屏幕中,我直接使用了
UITableViewController
,选择工作正常

在本例中,我有一个
UITableView
,它是
UIViewController
中的几个控件之一

我的自定义ViewController.h文件的定义与以下类似:

@interface MyViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>
    @property (weak,nonatomic) IBOutlet UITableView *myTableView;
@end
完成此操作后,将调用我的
numberOfSectionsInTableView
numberofrowsinssection
cellforrowtaindexpath
方法,并且我的表看起来与我希望的一样

我遇到的问题是,行没有选择,并且没有调用
didselectrowatinexpath
方法

我已经检查了序列图像板视图中的Selection是否设置为Single Selection,并且我还尝试设置myTableView.AllowSelection=YES
viewDidLoad
中,但这似乎没有任何区别

我知道这可能与我的表在普通视图控制器中这一事实有关,但我不知道我错过了使选择工作正常的神奇步骤

现在,我添加了一个变通方法。在
cellforrowatinexpath
中,我已将
UITapGestureRecognizer
附加到单元格中的每个视图:

for(UIView *view in cell.contentView.subviews){
    [view setUserInteractionEnabled:YES];
    UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRow:)];
    [tap setNumberOfTapsRequired:1];
    [view addGestureRecognizer:tap];
    view.tag = row; // So that I can identify in the handler which row has been tapped
}
然后在处理程序中:

-(void)tapRow:(id)sender{
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer*)sender;
    UIView *myView = (UIView*)gesture.view;
    int row = myView.tag;
    // Handle tap of row here
}

这实现了我所需要的,但我仍然想找出我在行选择上的错误

确保表视图顶部没有另一个视图(例如,一个透明的视图会窃取触摸事件)。还要确保为tableview及其所有父视图启用了userInteraction。

我们有时键入了错误的委托调用DidDesceleRowatingIndexPath,而不是didSeselectRowAtIndexPath。这是你的案子吗

我发现你可以在tableview中更新你的内容,这样连接就可以了。我想到函数名的错误

只是为了测试:用这个(复制、粘贴)替换didSelectRowAtIndexPath函数


在cellForRowAtIndexPath方法中添加此行


cell.userInteractionEnabled=否

昨天,当我意识到没有链接我的委托和表视图的数据源时,我在两分钟内遇到了与当前项目完全相同的问题。您是以编程方式创建的,因此它应该可以工作。对我来说,这是一个委托问题,你可以检查你的属性检查器以确保一切正常。

以防万一任何人仍然有这个问题。我刚刚意识到
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(nsindepath*)indepath
方法对于设置了点击手势识别器的任何视图或子视图都不起作用。因此,将轻触手势识别器从其父视图中移除。如果您仍想处理触摸事件,请使用“touchesbeated”功能(无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件 { [超级触摸开始:触摸事件:事件]

UITouch*touch=[触摸任何对象]


}`

您确定您的
didSelectRowAtIndexPath
的实现吗?您是否检查了您是否没有实现
didDeceloseRowatingIndexPath
?感谢您的建议,不幸的是,我的情况并非如此。除了未调用的
didSelectRowAtIndexPath
函数外,当我点击行时,我也没有得到默认的灰色行选择。您是否已将UI元素添加到单元格中,还是使用了标准单元格?假设代理设置正确,您看到的问题的主要原因是其他原因,或者是拦截触摸,或者您有一个像图像视图这样的元素,其userInteractionEnabled属性设置为NO。您的问题与UIViewController中的表无关。您是否在某些地方使用cell.selectionStyle属性。@rdelmar,单元格中只有一个标签。我试着缩小它的尺寸,这样我就可以触摸“裸电池”,但它仍然无法选择。UILabel、它包含的UIView和单元格都启用了用户交互。实际上,我现在已经实施了一个变通方法,我会将其编辑到问题中,但我看不出是什么阻止了标准选择。谢谢你的建议,不幸的是,我没有这样做。除了未调用的
didSelectRowAtIndexPath
函数外,我在点击行时也没有得到默认的灰色选择。请尝试设置选择类型=蓝色或默认值(非无),然后测试在选择行时您的tableview是否会改变颜色。谢谢,仍然是相同的结果我很抱歉谢谢Brian,我不认为这是我的问题,因为我可以滚动表格而没有任何问题,所以它看到了那些手势,感谢建议,但这对我来说没有任何区别。这是错误的。userInteractionEnabled必须为YES才能使单元格选择生效(默认情况下为YES)。
-(void)tapRow:(id)sender{
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer*)sender;
    UIView *myView = (UIView*)gesture.view;
    int row = myView.tag;
    // Handle tap of row here
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Selected %d",indexPath.row);
}