我遇到这样的问题:
我想在警报视图中显示自定义视图。所以我创建了一个单独的xib文件并设计了我的接口。并为它实现了类。但是当我应用下面的代码时,它给了我一个错误。
这是代码:
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];
这是我的错误:
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>'
我真的很喜欢iOS开发。我做错了吗?哪里出错了?我不知道这个Nib文件在这里说什么&#34; loadNibNamed:@bla boa&#34;我刚给了我的xib名字。任何人都可以给我一个更好的方法来做到这一点,或者你能告诉我在哪里需要改变以解决这个问题?
请指导我一些.. 谢谢。
答案 0 :(得分:3)
在ios7中的原生Alert-view
中,无法将自定义视图添加为alert-view
的子视图。您可以使用ios-custom-alertview执行此类任务,您可以执行所需操作。希望这对你有所帮助。
我正在使用此ios-custom-alertview
并将两个Bellow文件添加到我的项目中。
CustomIOS7AlertView.h
CustomIOS7AlertView.m
以及如何使用quick-start-guide
答案 1 :(得分:3)
此API为您的问题提供解决方案,并使用此功能
https://github.com/Darktt/DTAlertView
https://github.com/Scott90/SDCAlertView
答案 2 :(得分:3)
对于所有遇到此问题的人, 我已经关注了this链接......对于星标,我使用了this ..
您只需将以下文件添加到项目
即可并将代码放在要弹出警报视图的代码
下面// 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];
并且在createDemoView的方法中,您必须实现自定义视图。在我的情况下,它就像这样
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;
所以我的输出是这样的。 使用它,玩得开心:)
谢谢所有帮助过我的人。