我已经编写了一个自定义类,该类在它自己的视图边界之外显着依赖于触摸拖动/定位。有一个用各种相关方法定义的相关协议。使用这个协议的一个例子是一个视图,它允许从我的自定义类中将东西放入其中。
我遇到的问题是弄清楚触摸何时结束(对象被“丢弃”),是否有一个对象在该位置下方关心。(对于“关心”,请阅读“符合协议”!)。
如果它是一个符合我的协议的视图,那很容易,我可以使用- (CALayer *)hitTest:(CGPoint)thePoint
或类似的东西找到它并使用conformsToProtocol:@protocol(xx)
.
但是,如果它是 UIViewController 的子视图(例如),则该视图不符合协议,即使 UIViewController(因为它是委托)符合协议。如果视图确实想收到通知,我需要能够弄清楚它的委托是谁,以便发送消息。
所以,本质上,我如何从最低的 UIView 向上遍历视图层次结构,询问每个视图是否符合我的协议;如果没有,它是否有代表,并且符合..?
或者有没有我没有想到的更简单的方法?
非常感谢..
解决了
感谢moshy,我有一个解决方案:
- (UIView *)viewThatConformsToProtocol:(Protocol *)protocol AtPointInWindow:(CGPoint)point {
UIView *lowestUIView = [[(AppDelegate).navigationController view] hitTest:point withEvent:nil];
UIResponder *respondsToProtocol = lowestUIView;
while ((respondsToProtocol != nil) && (![respondsToProtocol conformsToProtocol:protocol])) {
respondsToProtocol = [respondsToProtocol nextResponder]; // else try the next responder up the chain
};
return (UIView *)respondsToProtocol;
}
这要么返回视图,要么返回nil
任何内容。
再次感谢..