Search code examples
iosuialertviewxibaddsubviewsdcalertview

adding a custom view to a alert view


i have a problem like this:

i want to show a customized view inside a alert view. so i create a separate xib file and designed my interface.and implemented the class for it too.but when i apply below code,it gives me an error.

this is the code :

 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];

and this is my 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>'

i really new to iOS development.did i do this wrong ? where is the mistake ? i don't know what is this Nib file talking here "loadNibNamed:@bla boa " i just gave my xib name for that. can anyone give me a better way to do this or can you tell me the where i have to change to fix this issue ?

please guide me some one.. thank you.


Solution

  • for all who having this problem, i have followed this link..and for the star marks, i used this..

    all you have to do is add below files to the project

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

    and put below code where you want to pop up the alert view

    // 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];
    

    and inside the method of createDemoView,you have to implement your customised view.in my case it is like this

    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;
    

    so my output is like this. use it and have fun :)

    thank you for everyone who helped me.

    enter image description here