iOS7中的UIAlertView addSubview

B.S*_*.S. 67 objective-c uialertview ios ios7

添加一些控件UIAlertView已在iOS7中使用addSubview方法弃用.据我所知,Apple承诺增加contentView财产.

iOS 7现已发布,我发现此属性未添加.这就是为什么我搜索一些能够为此alertView添加进度条的自定义解决方案.例如类似于TSAlertView的东西,但更适合在iOS 7中使用.

Wim*_*guc 55

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

(从此StackOverflow线程复制.)

自定义iOS7 AlertView对话框

  • 谢谢@WedgeMartin; 确实,这个项目是ARC项目.但是,您不需要*修复原始版本,只需在Xcode中设置一个例外:http://stackoverflow.com/questions/10523816/how-to-enable-arc-for-a-single-file (3认同)

Sul*_*han 35

我只花了一天时间创建了自己的警报视图,看起来与Apple的完全一样

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

  4. 显示/解除 - 您可以为警报创建特定的模态窗口,但我只是将警报放在我的根视图控制器之上.将可见警报注册到静态阵列.如果显示第一个警报/解除最后一个,请将窗口/视图控制器的色调模式更改为灰色/自动并添加/删除调光视图(黑色,alpha = 0.2).

  5. 模糊背景 - 使用Apple的示例代码(我使用了不透明的白色)
  6. 3D动态效果 - 使用Apple的示例代码(5行代码).如果您想要一个很好的效果,请在步骤5中拍摄稍大的快照,并为警报背景和前景添加反向动画.

编辑:

模糊背景和paralax效果示例代码都可以在"iOS_RunningWithASnap"WWDC 2013示例代码中找到

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];
Run Code Online (Sandbox Code Playgroud)

模糊的背景是唯一复杂的事情.如果您可以使用不透明颜色,请使用它.否则,这是很多实验.另请注意,背景模糊不清是背景黑暗的好方法.

对于show/dismiss animationg,我使用的是新的spring动画方法:

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
                     }];
Run Code Online (Sandbox Code Playgroud)

  • George Asda:Sulthan在创建UIAlertView克隆时提供了一个高级清单.此外,通过不直接共享其他人已支付的代码,显示员工的诚信.他根本没有帮助.表现出一些尊重.更好的是,创建一个实现并与我们分享...做其他人等. (14认同)

Sco*_*ets 32

我编写了一个完整的UIAlertView实现模仿完整的UIAlertView API,但添加了我们所需要的contentView属性:SDCAlertView.

图片

  • 荚肯定是要走的路.忽略反对者.如果他们不想使用Pods,那么手动添加就很简单了,我对抗荚人群的粗鲁程度感到震惊. (5认同)
  • @GeorgeAsda:至于你的错误:请问一个单独的问题并添加适当的信息和代码.README指示项目需要正确构建的文件.不确定你对Cocoapods有什么,但很多人认为这是获取该项目最新文件的最简单方法. (2认同)

Esh*_*nya 27

对于那些喜欢简单有效的方法而不必编写代码行的人.这是一个很酷的解决方案,没有使用任何其他私有框架工程,用于将子视图添加到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];
}
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助,谢谢:)

  • 我要求下来选民仔细审查答案并在投票前三思而后行.至少提供评论的理由是min.标准:v (3认同)

小智 17

对于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];
Run Code Online (Sandbox Code Playgroud)


nul*_*ull 10

UIAlertView在iOS7中不会有自定义视图,也不会contentView改变Apple的想法,所以addSubview现在不可能UIAlertView.

根据Apple论坛中的许多主题,一个很好的选择是SVProgressHUD.

编辑:

iOS7中正式没有addSubview或没有子类.UIAlertView

UIAlertView类旨在按原样使用,不支持子类化.此类的视图层次结构是私有的,不得修改.

其他好的选择:

wimagguc的ios-custom-alertview

MZFormSheetController.

  • 你最好试着找出一种不同的方式.不会有奇迹.;-) (4认同)
  • 我仍然认为会按照承诺添加contentView,因为在现有应用中打破UI是一个愚蠢的决定. (2认同)