我有一个UIView,在更大的UIView前面,我想隐藏当前的视图,当点击后面的视图但我无法获得Touch Up Outside事件工作,Touch Up Inside the View工作正常。
(后面的View有另一个控件)
由于
Tung Do
答案 0 :(得分:12)
触摸视图时会触发Touch Up Outside,但手指会移动到视图之外并被抬起。你无法通过它获得其他观点的触摸事件。
要完成您想要的任务,您需要一个透明视图(opaque = NO,backgroundColor = [UIColor clearColor]),它会在您感兴趣的视图后面填满整个屏幕。为此,您可以捕捉Touch Up Inside事件,然后隐藏两个视图。
答案 1 :(得分:0)
我过去通过创建自定义UIView然后覆盖UIView类的pointInside方法来完成此操作。这是每次UIView获取触摸通知时触发的方法。当发生这种情况时,您可以查看触摸是否在您的视图范围之内或之外。
例如,您的自定义UIView可能如下所示:
<强> CustomTouchUIView.h 强>
#import
@protocol CustomTouchUIViewDelegate
- (void) uiViewTouched:(BOOL)wasInside;
@end
@interface CustomTouchUIView : UIView
// Properties
@property (nonatomic, assign) id delegate;
@end
<强> CustomTouchUIView.m 强>
#import "TOTouchUIView.h"
@implementation CustomTouchUIView
#pragma mark - Synthesize
@synthesize delegate;
#pragma mark - Touches
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if( point.x > 0 && point.x < self.frame.size.width && point.y > 0 && point.y < self.frame.size.height )
{
[delegate uiViewTouched:YES ];
return YES;
}
[delegate uiViewTouched:NO ];
return NO;
}
@end
我有一个可下载的示例/教程在线here