Ios 向警报视图添加自定义视图

Ios 向警报视图添加自定义视图,ios,uialertview,xib,addsubview,sdcalertview,Ios,Uialertview,Xib,Addsubview,Sdcalertview,我有这样一个问题: 我想在警报视图中显示自定义视图。因此,我创建了一个单独的xib文件并设计了我的接口。并为它实现了类。但是当我应用下面的代码时,它给了我一个错误 代码如下: UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirm your Action" message:@"Click OK to confirm"

我有这样一个问题:

我想在警报视图中显示自定义视图。因此,我创建了一个单独的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>'
由于未捕获的异常“UIViewControllerHierarchyInconsistency”而终止应用程序,原因:“子视图控制器:应具有父视图控制器:但实际父视图控制器为:”
我对iOS开发很陌生。我做错了吗?错在哪里?我不知道这个Nib文件在这里说什么“loadNibNamed:@bla-boa”我只是给了我的xib名字。有谁能给我一个更好的方法来解决这个问题,或者你能告诉我在哪里我必须改变来解决这个问题吗

请给我引路。。
谢谢。

在ios7的本机
警报视图
中,无法将自定义视图添加为
警报视图
的子视图。你可以用它来完成这类任务,你可以随心所欲。希望这对你有帮助

我正在使用此
ios自定义alertview
,在我的项目中添加两个以下文件

CustomIOS7AlertView.h
CustomIOS7AlertView.m
还有如何使用它

这个API为您的问题提供了解决方案,请使用它并从中获得乐趣


对于所有有这个问题的人, 我跟随了林克,而对于星号,我用了

您所要做的就是将以下文件添加到项目中

  • CustomIOS7AlertView.h
  • CustomIOS7AlertView.m
  • JSFavStarControl.h
  • JSFavStarControl.m
并将下面的代码放在要弹出警报视图的位置

// 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;
所以我的输出是这样的。 使用它并享受乐趣:)

谢谢所有帮助我的人


,昨天我在回答中已经告诉您,这不是UIAlertView的问题。在您的控制台日志中,它清楚地提到了viewcontroller中存在一些问题。因此,请更改您的问题。这不是UIAlertView的问题。先生,我已经按照您昨天所说的进行了说明。但是没有起作用。所以我遵循这个。不知何故,我能够将星号添加到警报自定义视图中。但是无法添加其他文本字段和标签。您能否建议我在github上创建它的方法。请下载此文件,并在UIAlertView上告知您的问题。但是您提到的上述问题与UIAlertViews无关。一种方法是在视图控制器中设计自己的视图,然后以模块方式加载它。