在 UIAlertView 中下移按钮

Posted

技术标签:

【中文标题】在 UIAlertView 中下移按钮【英文标题】:Move buttons down in UIAlertView 【发布时间】:2012-01-07 20:05:15 【问题描述】:

我有一个以横向模式显示的应用程序,我用以下代码覆盖了 UIAlertView 的高度:

- (void) willPresentAlertView:(UIAlertView *)alertView

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    CGRect frame = [alertView frame];
    alertView.frame = CGRectMake(frame.origin.x, 0, frame.size.width, screenBounds.size.width);

这几乎可行。 UIAlertView 更高,但是警报视图中的按钮不会被按下。

有谁知道当我更改警报视图的高度时如何按下UIAlertView 中的按钮?

【问题讨论】:

【参考方案1】:

我认为用一些独立的 AlertView 代替 UIAlertView 更优雅,风险更小,而不是乱用它。独立的意思是不继承 UIAlertView 的形式。TSAlertView 就是这样的替代品。

http://dl.dropbox.com/u/47535/TSAlertView/1-thumb.png http://dl.dropbox.com/u/47535/TSAlertView/3-thumb.png http://dl.dropbox.com/u/47535/TSAlertView/2-thumb.png

【讨论】:

【参考方案2】:

我猜你可能必须继承/操作 UIAlertView 类来实现这一点,这可能是有风险的,因为 Apple 可以更改他们的实现,以便将你的代码包装在适当的检查中。

开始会做:

NSLog(@"UIAlertView subviews: %@",alertView.subviews);

这将为构成 UIAlertView 的各种元素打印一些输出,您可能会在其中看到一些 UIButton,然后您可以使用以下内容进行操作:

UIButton* button1 = (UIButton*)[alertView.subviews objectAtIndex:N];
[button1 setFrame:CGRect(button1.frame.origin.x, button1.frame.origin.y+10, button1.frame.size.width, button1.frame.size.height)]

一个明智的检查是在对它执行操作之前确认 objectAtIndex 是正确类型的元素,这不是万无一失的,但是因为 Apple 可以添加更多 UIButtons 或其他东西..

if ([[alertView.subviews objectAtIndex:N] isKindOfClass:[UIButton class]]) 
  ...

根据您的情况,您可能还希望遍历 subviews 数组并将所有 UIButtons 向下移动,而不仅仅是在某些特定 objectsAtIndex 中硬编码,但这是另一个答案。 :-)

【讨论】:

有效积分,但可能会因为乱搞Alert View类而导致App Store拒绝。顺便说一句,喜欢这个用户名。 同意改变它们是有风险的,但既然你已经涵盖了,我想我会提供一种可能的方式来做到这一点。你永远不知道,也许这是一个封闭的版本:-)。 您应该将此添加到您的答案中,因为我花了大约一个小时才弄清楚这一点:重置子类 UIAlertView 的按钮框架时,您必须在 layoutSubviews 中重置它类的方法,而不是 initWithTitle... 方法。【参考方案3】:

This link 应该会有所帮助。在我看来,我不会尝试弄乱视图层次结构。这可能会导致 App Store 被拒绝。要么从头开始构建一个新的 AlertView,要么保持原样。

【讨论】:

【参考方案4】:

NSArray *subViewArray=[alertView 子视图];

for (NSUInteger ind=0 ; ind < [subViewArray count]; ind++) 

    if ([[alertView.subviews objectAtIndex:ind] isKindOfClass:[UIButton class]]) 
        UIButton* button1 = (UIButton*)[alertView.subviews objectAtIndex:ind];
        [button1 setFrame:CGRectMake(button1.frame.origin.x, button1.frame.origin.y+100, button1.frame.size.width, button1.frame.size.height)];
        NSLog(@"button1.frame.origin.y=[%1.0f]",button1.frame.origin.y);

    

【讨论】:

以上是关于在 UIAlertView 中下移按钮的主要内容,如果未能解决你的问题,请参考以下文章

uialertview 中的图像...?

UIAlertView 和 UIAlertController

IOS UIAlertController 使用方法

UIAlertView,如何在里面放置很多按钮?

如何使 UIAlertView 上的按钮多行显示?

更改 UIAlertView 按钮布局