Iphone iOS 7中未显示UIAlertView按钮(子视图)
UIAlertView在ios 6中运行良好,代码如下。但在ios 7中,调用alertview时,子视图(“代码中的“是”和“否”按钮)不显示,只显示文本消息。有人能告诉我如何解决此问题吗 viewController.m文件Iphone iOS 7中未显示UIAlertView按钮(子视图),iphone,objective-c,uialertview,ios7,Iphone,Objective C,Uialertview,Ios7,UIAlertView在ios 6中运行良好,代码如下。但在ios 7中,调用alertview时,子视图(“代码中的“是”和“否”按钮)不显示,只显示文本消息。有人能告诉我如何解决此问题吗 viewController.m文件 [Utilities prCustomAlert:@"Textmessage" inTitle:@"Alert view title" delegate:self inTag:300]; CustomAlertView *alertView = [Utilit
[Utilities prCustomAlert:@"Textmessage" inTitle:@"Alert view title" delegate:self inTag:300];
CustomAlertView *alertView = [Utilities sharedUtility].customAlertView;
alertView.numberOfBtns = 2;
UIButton *btn= (UIButton *)[alertView viewWithTag:10];
[btn setTitle:@"no" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(dontlogout) forControlEvents:UIControlEventTouchDown];
btn = (UIButton *)[alertView viewWithTag:11];
[btn setTitle:@"yes" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(logout) forControlEvents:UIControlEventTouchDown];
[Utilities displayCustomAlertForDelegate:self];
UIAlertView.m文件
CGRect viewFrame = self.frame;
CGRect buttonFrame = button.frame;
if(self.numberOfBtns==2){
CGRect labelFrame = [self viewWithTag:15].frame;
button.frame = CGRectMake(10, 0, 40, 30);
button.hidden = NO;
//yes...
btn = (UIButton *)[self viewWithTag:11];
btn.frame = CGRectMake(60, 0, 40, 30);
btn.hidden = NO;
//no..
btn = (UIButton *)[self viewWithTag:10];
btn.hidden = YES;
}
我认为iOS7问题的根源在于苹果改变了UIAlertView的外观机制。 从现在起,启动两个专用视图控制器后,将显示alertView
_UIModalItemAppViewController
_UIModalItemsPresentingViewController
换句话说,现在UIAlertView不是一个纯粹的视图-它是具有完整视图控制器生命周期的一些复杂视图控制器集合的一部分
但好消息是,您可以在标准警报视图中将accessoryView更改为customContentView
[alertView setValue:customContentView forKey:@"accessoryView"];
请注意,您必须在[alertView show]之前调用此选项。您所做的总是错误的。不允许将自己的子视图添加到UIAlertView。好消息是——在iOS 7中,你不必这么做!新的自定义过渡动画机制允许您创建自己的视图,该视图仅表现为警报视图,但由于它是您的视图,因此您可以将任何喜欢的内容放入其中,如下所示: 请注意,在右侧的屏幕截图中,假“警报视图”如何漂浮在原始视图的前面,并使其后面的屏幕变暗,就像真实的警报视图一样。但它完全由自定义内容组成;“真实”警报视图永远不能包含图像和开关
有关创建此视图的代码(您可以轻松地根据自己的目的进行调整),请参见my github网站:我们可以在显示UIAlertView时,通过将子视图添加到presentedViewController的视图,将子视图添加到UIAlertView。我以如下方式访问UIAlertView: NSArray*子视图=[UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController.view.SubView 我创建了UIAlerView的一个子类: 头文件:
@interface MLKLoadingAlertView : UIAlertView
- (id)initWithTitle:(NSString *)title;
@end
实施文件:
#import "MLKLoadingAlertView.h"
#define ACTIVITY_INDICATOR_CENTER CGPointMake(130, 90)
@implementation MLKLoadingAlertView
- (id)initWithTitle:(NSString *)title
{
if ( self = [super init] )
{
self.title = title;
self.message = @"\n\n";
[self setDelegate:self];
}
return self;
}
// You can Customise this based on your requirement by adding subviews.
- (void)didPresentAlertView:(UIAlertView *)alertView
{
NSArray *subviews = [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController.view.subviews;
if( subviews.count > 1 )
{
// iOS while presenting an alertview uses a presening view controller. That controller's view has several subviews. I have picked one
// subview from it which has frame similar to the alertview frame.
UIView *presentedView = [subviews objectAtIndex:1];
UIActivityIndicatorView *customActivityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[customActivityIndicator startAnimating];
customActivityIndicator.center = ACTIVITY_INDICATOR_CENTER;
[presentedView addSubview:customActivityIndicator];
}
}
@end
在-(void)didPresentAlertView:(UIAlertView*)alertView方法中,我通过访问呈现视图控制器的视图将子视图添加到UIAlertView
您可以在上找到这方面的解释和代码示例UIAlertView的视图层次结构很长时间以来都是私有的。苹果在iOS7中开始实施这一点。您必须创建一个模仿UIAlertView的UIView子类,而不是操纵视图层次结构。@MatthiasBauch您能在编码中回答这个问题吗?与如何创建UIViews并将其添加到UIAlertView类似,您不能将视图添加到UIAlertView。您将UIView子类化并使其看起来像UIAlertView。检查做你想要的事情的类。