Поместите это в UIViewController
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view!=yourView && yourView) {
[yourView removeFromSuperview];
yourView=nil;
}
}
РЕДАКТИРОВАТЬ: изменения, внесенные для обнаружения касания и удаления, только если существует вид* Methods
if (yourView) {
[yourView removeFromSuperview];
yourView=nil;
}
или добавьте touchesBegan:withEvent:
в качестве события touchDown для ваших кнопок.
Оба раздражают, но не видят другого способа сделать это как touchesBegan
методне вызывается с интерактивными элементами.
РЕДАКТИРОВАТЬ3: Право записать, думаю, я прибил
в вашем интерфейсе добавить UIGestureRecognizerDelegate
@interface ViewController : UIViewController <UIGestureRecognizerDelegate> {
затем в вашем viewDidLoad
добавьте это
UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMethod)];
tapped.delegate=self;
tapped.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapped];
затем в вашем viewController добавьте эти 2 метода
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (touch.view!=yourView && yourView) {
return YES;
}
return NO;
}
-(void)tapMethod {
[yourView removeFromSuperview];
yourView=nil;
}