UIView 内的表格不滚动或接收触摸

Posted

技术标签:

【中文标题】UIView 内的表格不滚动或接收触摸【英文标题】:Table Inside UIView not scrolling or receiving touches 【发布时间】:2014-01-23 22:41:28 【问题描述】:

我正在制作应用程序,我使用SDCAlertView(https://github.com/Scott90/SDCAlertView) 及其contentView 属性来显示UITableView。当我尝试滚动表格时出现问题。

这是我分配警报的方式:

    SDCAlertView *soundAlertView = [[SDCAlertView alloc] initWithTitle:@"Select Sound" message:@"Select a sound." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

    //Give the alert a tag for later id'ing
    soundAlertView.tag = 2;

这就是我创建表格然后将其添加到警报的子视图的方式:

//Create the tableview controller
    SelectionViewController *soundSelection = [self.storyboard instantiateViewControllerWithIdentifier:@"selectionCont"];

    //assign the table to a local var
    UITableView *table = soundSelection.tableView;
    UIView *tableHolderView = [[UIView alloc] initWithFrame:CGRectMake(table.frame.origin.x, table.frame.origin.y, soundAlertView.contentView.frame.size.width, 200)];

    [tableHolderView addSubview:table];


    //Add the table view to the alert view
    [soundAlertView.contentView addSubview:tableHolderView];

然后我添加约束以使 tableview 适合警报,然后显示警报:

   //Make sure the tableview fits in the alert
    [soundAlertView.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableHolderView]|"
                                                                              options:0
                                                                              metrics:nil
                                                                                views:NSDictionaryOfVariableBindings(tableHolderView)]];
    [soundAlertView show];

经过研究,我发现我可能应该将触摸从contentView 传递到contanerViewtableView。虽然这可行,但它需要子类化,我不能子类化以访问 contentView 属性。

如何让tableView 识别警报的contentView 识别的触摸和滚动?

谢谢

【问题讨论】:

【参考方案1】:

我想通了,诀窍是继承 SDCAlertView 本身,然后将 hitTest: 发送到 tableview。

【讨论】:

【参考方案2】:

将 BOUNCES UITableView 的属性设置为 YES,解决了我的问题。

【讨论】:

以上是关于UIView 内的表格不滚动或接收触摸的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIPanGestureRecognizer 通过 UIView 发送触摸

以 UIScrollView 作为子类的 UIView 不接收触摸事件

如何从嵌入在UIScrollView内部的UiView内嵌的CollectionView接收触摸事件

UIView 从 UITableView “窃取”触摸

当用户触摸 uiscrollview 时隐藏表格

UIScrollView 未检测到折叠后的触摸