触摸时未调用 didSelectRowAtIndexPath

Posted

技术标签:

【中文标题】触摸时未调用 didSelectRowAtIndexPath【英文标题】:didSelectRowAtIndexPath not called on Touch 【发布时间】:2016-09-09 10:35:25 【问题描述】:

我的 didSelectRowAtIndexPath 方法没有被调用。我重新加载表并重新加载并调用 talbeView

的所有方法

这是我所有的tableview方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    NSString *s = (NSString *) [app.Glb.arrayRoomList objectAtIndex:indexPath.row];

    NSString *cellIdentifire = @"CellRoomList";
    CellRoomList *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifire];
    if(cell == nil)
    
        cell = (CellRoomList*)[[[NSBundle mainBundle] loadNibNamed:@"CellRoomList" owner:self options:nil] objectAtIndex:0];
    

    cell.lblRoomName.text = s;

    return cell;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    return [app.Glb.arrayRoomList count];



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

    NSString *userName = (NSString *) [app.Glb.arrayRoomList objectAtIndex:indexPath.row];
    NSLog(@"userName :---- %@",userName);
    ViewController *chatController = [[ViewController alloc] init];
    chatController.chatWithUser = userName;
    [self.navigationController pushViewController:chatController animated:YES];

我在堆栈中阅读了一些问题,但无法得到答案。

如果我长时间触摸单元格而不是单元格的颜色变化但不称为didSelectRowAtIndexPath

为什么不叫它?

这里是快照:

【问题讨论】:

你有没有用你的viewController设置tableView委托tableView.delegate = self; 是的,我在 XIB 上添加了它,这就是我调用其他方法的原因 在 NSLog 中打印时是否可以检查用户名? didSelectRowAtIndexPath 是 tableView 委托。 cellForRowAtIndexPath 和 numberOfRowsInSection tableview 数据源。所以你说两者都是连接的。与代表一起检查一次这个问题。删除一次再添加试试 是的,它是一样的...@Vickyexpert 【参考方案1】:

单元格中可能有其他视图可以拦截触摸事件。确保将 NO 设置为视图的属性 userInteractionEnabled

【讨论】:

在您的自定义单元格中禁用视图(UILabel..)并检查表格行选择。【参考方案2】:

我曾多次遇到这个普遍问题。

请注意以下事项

    确保您的单元格对其内容没有任何类型的触摸/点击手势 确保您的视图没有应用任何触摸/点击手势 确保您没有任何应用了任何触摸/点击手势的视图或表格视图类别(扩展)[这一点更为关键,因为我们通常不希望这样做] 检查您是否有任何第三方负责触摸/点击手势

最常见的原因是视图中的手势阻止表格接触单元格。

【讨论】:

是的,这就是问题所在,我正在添加手势以在查看点击时关闭键盘,这使得问题出现在这里。【参考方案3】:

正如您所说,您正在获取用户名,这意味着您的方法正在调用但未重定向到另一个屏幕,因为您以错误的方式启动视图控制器,因此请通过以下方式更改它,

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

   NSString *userName = (NSString *) [app.Glb.arrayRoomList objectAtIndex:indexPath.row];
   NSLog(@"userName :---- %@",userName);

   ViewController *chatController = [[ViewController alloc] initWithNibName:@"ViewControllerId" bundle:nil];

   chatController.chatWithUser = userName;
   [self.navigationController pushViewController:chatController animated:YES];

【讨论】:

它调用了长按。 它只会在点击时调用,因为我们在 didselect 方法中实现了逻辑,而不是像按下日志那样的手势,有时可能是第一次,但它应该只适用于触摸任何行【参考方案4】:

检查选择是否设置为单选!

【讨论】:

以上是关于触摸时未调用 didSelectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT:触摸屏幕时未调用 touchesEnded

使用 UIGestureRecogniser 子类化时未调用 Touches Ended

Qt TextField 在 Android 设备上启动时未调用键盘

UISearchBar 移动到屏幕顶部时未收到触摸

添加为另一个视图的子视图时未调用 touchesBegan 方法

iOS:获取本机弹出窗口时未获取 touchesCancelled