UIAlertView addSubview在iOS7中
在iOS7中,使用addSubview
方法不推荐将一些控件添加到UIAlertView
。 据我所知苹果承诺添加contentView
属性。
现在iOS 7发布了,我发现这个属性没有添加。 这就是为什么我search能够添加进度条到这个alertView的一些自定义的解决scheme。 比如类似TSAlertView的东西,但是更适合在iOS 7中使用 。
这是Github上的一个项目,可以将任何UIView添加到iOS7上的UIAlertView对话框中。
(从这个StackOverflow线程复制。)
我花了1天的时间创build了自己的警报视图,看起来和苹果一模一样
- 以苹果公司的警报截图作为参考(字体大小,间距,宽度)
- 创build一个带有标题,消息,自定义视图和button表格的xib(Apple现在使用表格而不是
UIButton
,默认表格单元格已经足够好了)。 请注意,您需要3个button表:左右两个button(每当button数为2时),另一个用于其他情况(一个button或多于2个button)。 -
在您的自定义警报上实现来自
UIAlertView
所有方法。 -
显示/closures – 你可以为你的警报创build一个特定的模式窗口,但我只是把我的警报放在我的根视图控制器之上。 将您的可见警报注册到静态数组。 如果显示第一个警报/closures最后一个,则将窗口/视图控制器的着色模式更改为变暗/自动,并添加/删除调光视图(alpha = 0.2的黑色)。
- 模糊的背景 – 使用苹果的示例代码(我用不透明的白色)
- 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 。
编辑 :
UIAlertView
在iOS7中没有正式的addSubview
也没有子类。
UIAlertView类旨在按原样使用,不支持子类。 这个类的视图层次是私有的,不能被修改。
其他好的select:
ios-custom-alertview由wimagguc
MZFormSheetController 。
你可以find简单的解决scheme,没有额外的课程
它基于为普通的UIAlertView设置accessoryView 。
PKAlertController( https://github.com/goodpatch/PKAlertController )是一个伟大的库。 我testing了很多类似的库,只是满足了我所有的要求。
为什么它很酷:
- 支持自定义视图
- 支持iOS7
- 这是视图控制器
- 它的行为和看起来像本地警报视图,包括运动效果
- 定制
- 类似于UIAlertController的界面