ios – 接收外界的触摸事件

前端之家收集整理的这篇文章主要介绍了ios – 接收外界的触摸事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以前有类似的问题,我已经提到 Capturing touches on a subview outside the frame of its superview using hitTest:withEvent:Delivering touch events to a view outside the bounds of its parent view.但他们似乎没有回答我的特殊问题.

我有一个具有以下结构的自定义控件:

+-------------------------------+
|           UIButton            |
+-------------------------------+
|                          |
|                          |
|        UITableView       |
|                          |
|                          |
+------------------------- +

自定义控件覆盖UIButton子类,并将UITableView作为其子视图添加.这个想法是让整个控制像一个下拉菜单.当UIButton被按下时,UITableView将会下拉并选择一个选项.

如果控件是最上面的UIView的直接孩子,这一切都适用于在UIButton中重击的hitTest,如Apple的上述Q&A A链接所述.但是,如果控件位于另一个视图层次结构中,则UITableView不会接收触摸事件.

以下是使用的hitTest代码

override func hitTest(point: CGPoint,withEvent event: UIEvent?) -> UIView? {
    // Convert the point to the target view's coordinate system.
    // The target view isn't necessarily the immediate subview
    let pointForTargetView = self.spinnerTableView.convertPoint(point,fromView:self) 

    if (CGRectContainsPoint(self.spinnerTableView.bounds,pointForTargetView)) {
        // The target view may have its view hierarchy,// so call its hitTest method to return the right hit-test view
        return self.spinnerTableView.hitTest(pointForTargetView,withEvent:event);
    }
    return super.hitTest(point,withEvent: event)
}

编辑:

对于没有能够查看答案并检查是否解决问题,由于需要立即关注的其他一些任务,我们深表歉意.我会检查一下,接受一个帮助.谢谢你的耐心.

解决方法

正如你所说:

However,if the control is in another view hierarchy,the UITableView
is not receiving touch events.

即使你使它工作,如果你已经在另一个UIView?

这样我们有一个为视图层次结构转换点的负担,我的建议是,如您在this control中可以看到的,它将表视图添加到控件本身存在的同一层次结构中. (例如,它在添加了该控件的控制器上添加表视图)

链接的一部分:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self setupSuggestionList];
    [suggestionListView setHidden:NO];

    // Add list to the super view.
    if(self.dataSourceDelegate && [self.dataSourceDelegate isKindOfClass:UIViewController.class])
    {
        [((UIViewController *)self.dataSourceDelegate).view addSubview:suggestionListView];
    }

    // Setup list as per the given direction
    [self adjustListFrameForDirection:dropDownDirection];
}

希望有帮助!

猜你在找的iOS相关文章