在 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 中下移按钮的主要内容,如果未能解决你的问题,请参考以下文章