我有一个带有文本字段,按钮和表格的UIWindow。 我希望能够跟踪屏幕上的所有触摸,然后将它们转发到被触摸的元素。
我已阅读Apple documentation中覆盖sendEvent
的内容,但我仍然不明白:
hitTest
检索被触摸的元素这是我到目前为止所做的。
- (void) sendEvent:(UIEvent *)event
{
for (UITouch *touch in [event allTouches])
{
/* Get coordinates of touch */
CGPoint point = [touch locationInView:self];
/* Get subview being touched */
/* something like this???
UIView *receiver = [self hitTest:point withEvent:event];
*/
/* Forward touch event to right view */
/* how??? */
}
[super sendEvent:(UIEvent *)event];
}
谢谢。
答案 0 :(得分:2)
我不确定这是最好的解决方案,但我关注的是here已发布的内容。
基本上我有一个UIView的子类覆盖整个空间。这样的类包含对所有可触摸元素的引用。 (我希望有办法避免这种情况)
这是标题中的代码
@interface SubclassUIView : UIView {
UITextField *text;
UITableView *table;
UIButton *button;
UIToolbar *toolbar;
}
这是实施:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
CGPoint tableHit = [table convertPoint:point fromView:self];
CGPoint buttonHit = [button convertPoint:point fromView:self];
CGPoint toolbarHit = [toolbar convertPoint:point fromView:self];
CGPoint messageHit = [text convertPoint:point fromView:self];
if ([table pointInside:tViewHit withEvent:event]) return table;
else if ([button pointInside:buttonHit withEvent:event]) return button;
else if ([toolbar pointInside:toolbarHit withEvent:event]) return toolbar;
else if ([text pointInside:messageHit withEvent:event]) return text;
return [super hitTest:point withEvent:event];
}