agregar una vista personalizada a una vista de alerta

Tengo un problema como este:

Quiero mostrar una vista personalizada dentro de una vista de alerta. así que creo un file xib separado y diseñé mi interfaz. También implementé la class para ello. Pero cuando aplico el código siguiente, me da un error.

este es el codigo:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirm your Action" message:@"Click OK to confirm" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Cancel",nil]; NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"customDialogViewController" owner:self options:nil]; customDialogViewController *myView = (customDialogViewController*) [subviewArray objectAtIndex:0]; [alert setValue:myView forKey:@"accessoryView"]; //alert.alertViewStyle = UIAlertViewStylePlainTextInput; alert.tag = KAlertViewthree; [alert show]; 

y este es mi error:

 Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<ScheduleView: 0x8adf1a0> should have parent view controller:<_UIModalItemAccessoryViewControllerForLegacyAlert: 0xa888b70> but actual parent is:<UINavigationController: 0x8add8c0>' 

Realmente soy nuevo en el desarrollo de iOS. ¿Hice esto mal? donde esta el error? No sé qué es este file Nib hablando aquí "loadNibNamed: @bla boa" Acabo de dar mi nombre xib para eso. ¿Alguien puede darme una mejor manera de hacer esto o puedes decirme dónde tengo que cambiar para solucionar este problema?

por favor guíame una … gracias.

En la Alert-view nativa en ios7 que no es posible agregar Vista personalizada como una vista secundaria de la vista de alert-view . Puede utilizar ios-custom-alertview para realizar este tipo de tareas, puede hacer lo que quiera. Espero que esto te sea útil.

Estoy usando este ios-custom-alertview con la adición de dos files Bellow en mi proyecto.

 CustomIOS7AlertView.h CustomIOS7AlertView.m 

y cómo usar hay una guía de inicio rápido

introduzca la descripción de la imagen aquí

Esta API tiene una solución para su problema, use esto y diviértase

https://github.com/Darktt/DTAlertView

https://github.com/Scott90/SDCAlertView

introduzca la descripción de la imagen aquí

https://github.com/lmcd/LMAlertView

Para todos los que tienen este problema, he seguido este enlace … y para las marcas estelares, usé esto …

todo lo que tienes que hacer es agregar files a continuación al proyecto

  • CustomIOS7AlertView.h
  • CustomIOS7AlertView.m
  • JSFavStarControl.h
  • JSFavStarControl.m

y coloque el código debajo donde desea que aparezca la vista de alerta

 // Here we need to pass a full frame CustomIOS7AlertView *alertView = [[CustomIOS7AlertView alloc] init]; // Add some custom content to the alert view [alertView setContainerView:[self createDemoView]]; // Modify the parameters [alertView setButtonTitles:[NSMutableArray arrayWithObjects:@"Close1", @"Close2", @"Close3", nil]]; [alertView setDelegate:self]; // You may use a Block, rather than a delegate. [alertView setOnButtonTouchUpInside:^(CustomIOS7AlertView *alertView, int buttonIndex) { NSLog(@"Block: Button at position %d is clicked on alertView %d.", buttonIndex, [alertView tag]); [alertView close]; }]; [alertView setUseMotionEffects:true]; // And launch the dialog [alertView show]; 

y dentro del método de createDemoView, debe implementar su vista personalizada. En mi caso es así

 UIView *demoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 290, 100)]; //alertView.tag=2; UILabel *rateLbl=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 290, 45)]; rateLbl.backgroundColor=[UIColor clearColor]; rateLbl.font=[UIFont boldSystemFontOfSize:15]; rateLbl.text=@"Rate"; UILabel *cmntLable=[[UILabel alloc]initWithFrame:CGRectMake(10, 45, 290, 45)]; cmntLable.backgroundColor=[UIColor clearColor]; cmntLable.font=[UIFont boldSystemFontOfSize:15]; cmntLable.text=@"Add Comment"; UIImage *dot, *star; dot = [UIImage imageNamed:@"dot.png"]; star = [UIImage imageNamed:@"star.png"]; JSFavStarControl *rating = [[JSFavStarControl alloc] initWithLocation:CGPointMake(150, 20) dotImage:dot starImage:star]; [rating addTarget:self action:@selector(updateRating:) forControlEvents:UIControlEventValueChanged]; UILabel *lblAlertTItle=[[UILabel alloc]initWithFrame:CGRectMake(5, 5, 290, 45)]; lblAlertTItle.backgroundColor=[UIColor clearColor]; lblAlertTItle.textAlignment=UITextAlignmentCenter; lblAlertTItle.font=[UIFont boldSystemFontOfSize:18]; lblAlertTItle.text=@"Choose your sharing option"; UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(150, 57, 100, 25)]; text.backgroundColor=[UIColor whiteColor]; //[demoView addSubview:lblAlertTItle]; [demoView addSubview:text]; [demoView addSubview:rating]; [demoView addSubview:rateLbl]; [demoView addSubview:cmntLable]; return demoView; 

así que mi salida es así. Úselo y diviértete 🙂

gracias por todos los que me ayudaron.

introduzca la descripción de la imagen aquí