create a hittestintercept view. this can make the view below handle events as before.
@protocol HitTestInterceptViewDelegate <NSObject> - (BOOL)interceptHitTest:(CGPoint)point withEvent:(UIEvent *)event; @end @interface HitTestInterceptView : UIView @property(nonatomic, weak) id<HitTestInterceptViewDelegate> hitTestInterceptDelegate; @end
HtiTestInterceptView.m
import "HitTestInterceptView.h"
@implementation HitTestInterceptView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if ([_hitTestInterceptDelegate interceptHitTest:point withEvent:event] == NO) { return [super hitTest:point withEvent:event]; } return nil; } @end
then use it in toast view
- (void)dismissIfTouchOutsideInView:(UIView *)view { if (_interceptView != nil) return; _interceptView = [[HitTestInterceptView alloc] initWithFrame:view.bounds]; _interceptView.backgroundColor = [UIColor clearColor]; _interceptView.hitTestInterceptDelegate = self; [view insertSubview:_interceptView belowSubview:self]; } - (BOOL)interceptHitTest:(CGPoint)point withEvent:(UIEvent *)event { dispatch_async(dispatch_get_main_queue(), ^{
Gointerface
source share