UIAlertView addSubview在iOS7中

在iOS7中,使用addSubview方法不推荐将一些控件添加到UIAlertView 。 据我所知苹果承诺添加contentView属性。

现在iOS 7发布了,我发现这个属性没有添加。 这就是为什么我search能够添加进度条到这个alertView的一些自定义的解决scheme。 比如类似TSAlertView的东西,但是更适合在iOS 7中使用

这是Github上的一个项目,可以将任何UIView添加到iOS7上的UIAlertView对话框中。

(从这个StackOverflow线程复制。)

自定义iOS7 AlertView对话框

我花了1天的时间创build了自己的警报视图,看起来和苹果一模一样

  1. 以苹果公司的警报截图作为参考(字体大小,间距,宽度)
  2. 创build一个带有标题,消息,自定义视图和button表格的xib(Apple现在使用表格而不是UIButton ,默认表格单元格已经足够好了)。 请注意,您需要3个button表:左右两个button(每当button数为2时),另一个用于其他情况(一个button或多于2个button)。
  3. 在您的自定义警报上实现来自UIAlertView所有方法。

  4. 显示/closures – 你可以为你的警报创build一个特定的模式窗口,但我只是把我的警报放在我的根视图控制器之上。 将您的可见警报注册到静态数组。 如果显示第一个警报/closures最后一个,则将窗口/视图控制器的着色模式更改为变暗/自动,并添加/删除调光视图(alpha = 0.2的黑色)。

  5. 模糊的背景 – 使用苹果的示例代码(我用不透明的白色)
  6. 3Ddynamic效果 – 使用Apple的示例代码(5行代码)。 如果你想要一个很好的效果,在步骤5中稍微大一点的快照,并添加反向animation,以提醒背景和前景。

编辑:

在“iOS_RunningWithASnap”WWDC 2013示例代码中可以find模糊的背景和paralax效果示例代码

松弛效应:

 UIInterpolatingMotionEffect* xAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis] autorelease]; xAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0]; xAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0]; UIInterpolatingMotionEffect* yAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis] autorelease]; yAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0]; yAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0]; UIMotionEffectGroup *group = [[[UIMotionEffectGroup alloc] init] autorelease]; group.motionEffects = @[xAxis, yAxis]; [self addMotionEffect:group]; 

模糊的背景是唯一复杂的事情。 如果您可以使用不透明的颜色,请使用它。 否则,这是很多的尝试。 另外请注意,模糊的背景不是一个很好的解决scheme,当背景是黑暗的。

对于显示/解除animation,我正在使用新的弹簧animation方法:

 void (^animations)() = ^{ self.alpha = 1.0f; self.transform = CGAffineTransformIdentity; }; self.alpha = 0.0f; self.transform = CGAffineTransformMakeScale(0.5f, 0.5f); [UIView animateWithDuration:0.3 delay:0.0 usingSpringWithDamping:0.7f initialSpringVelocity:0.0f options:UIViewAnimationOptionCurveLinear animations:animations completion:^(BOOL completed) { //calling UIAlertViewDelegate method }]; 

我编写了一个完整的UIAlertView实现,它模仿完整的UIAlertView API,但是添加了我们所有想要的contentView属性: SDCAlertView 。

图片

对于那些喜欢简单而有效的方法而不必写代码的人来说。 这是一个很酷的解决scheme,而不使用任何其他私人框架工程添加子视图到ios 7警报视图,即

[alertView setValue:imageView forKey:@“accessoryView”];

为了更好的理解示例代码,

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(180, 10, 85, 50)]; UIImage *wonImage = [UIImage imageNamed:@"image.png"]; [imageView setImage:wonImage]; //check if os version is 7 or above if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { [alertView setValue:imageView forKey:@"accessoryView"]; }else{ [alertView addSubview:imageView]; } 

希望它有助于一个,谢谢:)

对于IOS7

 UIAlertView *alertView1 = [[UIAlertView alloc] initWithTitle:@"Enter Form Name" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alertView1.alertViewStyle = UIAlertViewStyleSecureTextInput; UITextField *myTextField = [alertView1 textFieldAtIndex:0]; [alertView1 setTag:555]; myTextField.keyboardType=UIKeyboardTypeAlphabet; [alertView1 show]; 

在iOS7中不会是UIAlertView和自定义视图,也不是Apple改变主意的contentView ,所以在UIAlertView addSubview是不可能的。

根据苹果论坛的许多主题,一个好的select是SVProgressHUD 。

编辑

UIAlertViewiOS7中没有正式的addSubview也没有子类。

UIAlertView类旨在按原样使用,不支持子类。 这个类的视图层次是私有的,不能被修改。

其他好的select:

ios-custom-alertview由wimagguc

MZFormSheetController 。

你可以find简单的解决scheme,没有额外的课程

它基于为普通的UIAlertView设置accessoryView

PKAlertController( https://github.com/goodpatch/PKAlertController )是一个伟大的库。 我testing了很多类似的库,只是满足了我所有的要求。

为什么它很酷:

  • 支持自定义视图
  • 支持iOS7
  • 这是视图控制器
  • 它的行为和看起来像本地警报视图,包括运动效果
  • 定制
  • 类似于UIAlertController的界面