我有一个具有以下结构的自定义控件:
+-------------------------------+| 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 – 接收外界的触摸事件全部内容,希望文章能够帮你解决ios – 接收外界的触摸事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)