Cómo descartar UIView creado mediante progtwigción cuando el usuario toca cualquier parte de la pantalla del iPhone

Estoy trabajando en una aplicación donde se crea una vista emergente de manera programática. Ahora el requisito es cuando el usuario toca en otra parte que popview, quiero eliminar esa vista de superview.

A continuación se muestra mi código para crear vista

- (IBAction)Morebtn:(id)sender { UIView *cv = [[UIView alloc]initWithFrame:CGRectMake(200, 60, 100, 80)]; UIButton *label1 = [[UIButton alloc]initWithFrame:CGRectMake(-50,2, 200, 30)]; [label1 setTitle: @"My Button" forState: UIControlStateNormal]; label1.titleLabel.font=[UIFont fontWithName:@"SegoeUI" size:12.0]; [label1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [cv addSubview:label1]; UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(5,20, 200, 30)]; label2.text = @"Mark as unread"; label2.font=[UIFont fontWithName:@"SegoeUI" size:12.0]; [cv addSubview:label2]; //add label2 to your custom view [cv setBackgroundColor:[UIColor grayColor]]; [self.view addSubview:cv]; } 

Aquí está mi captura de pantalla de vista introduzca la descripción de la imagen aquí

declara UIView *cv en todo el mundo

y Remove function al igual que

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [cv setHidden:YES]; [self.view.superview endEditing:YES]; } 

elección no 2

 @property (strong, nonatomic) UIView * cv; -(void)viewDidLoad { [super viewDidLoad]; // here add the view cv = [[UIView alloc]initWithFrame:CGRectMake(200, 60, 100, 80)]; UIButton *label1 = [[UIButton alloc]initWithFrame:CGRectMake(-50,2, 200, 30)]; [label1 setTitle: @"My Button" forState: UIControlStateNormal]; label1.titleLabel.font=[UIFont fontWithName:@"SegoeUI" size:12.0]; [label1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [cv addSubview:label1]; UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(5,20, 200, 30)]; label2.text = @"Mark as unread"; label2.font=[UIFont fontWithName:@"SegoeUI" size:12.0]; [cv addSubview:label2]; //add label2 to your custom view [cv setBackgroundColor:[UIColor grayColor]]; } 

en tu acción de button

 - (IBAction)Morebtn:(id)sender { [self.view addSubview:cv]; } 

Funciona al 100%

  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [super touchesBegan:touches withEvent:event]; [urView removeFromSuperview]; } 

testing esto

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint locationPoint = [[touches anyObject] locationInView:self.view]; UIView* viewYouWishToObtain = [self hitTest:locationPoint withEvent:event]; if ([viewYouWishToObtain isKindOfClass: [customView Class]]) [customView removeFromSuperview]; } 

Espero que esto te ayudará..

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [cv removeFromSuperView]; 

// o

 [cv setHidden:Yes]; } 

Es bastante simple, simplemente cree un método en su UIViewController. tocaBegan y escribe un método en eso. pero antes de eso, haga que su Object cv global en su vista

 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self.cv removeFromSuperview]; self.cv=nil; }