我有一个以横向模式显示的应用,我用以下代码覆盖了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
按下按钮?
答案 0 :(得分: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
答案 1 :(得分:0)
我猜你可能必须继承/操作UIAlertView类来实现这一点,这可能会有风险,因为Apple可以更改它们的实现,因此将代码包装在适当的检查中。
一开始就是:
NSLog(@"UIAlertView subviews: %@",alertView.subviews);
那将为构成UIAlertView的各种元素打印一些输出,你可能会看到一些UIButtons,你可以通过使用类似的东西来操作:
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可以添加更多的UIButton或其他东西..
if ([[alertView.subviews objectAtIndex:N] isKindOfClass:[UIButton class]]) {
...
}
根据您的情况,您可能还想迭代子视图数组并向下移动所有UIButton,而不仅仅是在某些特定对象中进行硬编码,但这是另一个答案。 : - )
答案 2 :(得分:0)
This link应该有所帮助。在我看来,我不会尝试搞乱视图层次结构。这可能会导致App Store拒绝。从头开始构建一个新的AlertView,或保持原样。
答案 3 :(得分:0)
NSArray * subViewArray = [alertView subviews];
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);
}
}