我想用两个按钮创建UIAlertView。我需要垂直布置这些按钮(我的文字太大了)。可能吗 ?
屏蔽1
画面2
答案 0 :(得分:8)
似乎没有SDK支持此行为。 UIAlertView 中的两个按钮将始终以水平布局显示。
但是,将 UIAlertView 子类化以获得预期的行为非常容易。让我们调用类 VerticalAlertView 。
以下代码仅适用于带有两个按钮的警报视图,因为 UIAlertView 中的两个以上按钮将自动以垂直布局显示。
VerticalAlertView.h 就像这样简单:
#import <UIKit/UIKit.h>
@interface VerticalAlertView : UIAlertView
@end
VerticalAlertView.m :
#import "VerticalAlertView.h"
@implementation VerticalAlertView
- (void)layoutSubviews
{
[super layoutSubviews];
int buttonCount = 0;
UIButton *button1;
UIButton *button2;
// first, iterate over all subviews to find the two buttons;
// those buttons are actually UIAlertButtons, but this is a subclass of UIButton
for (UIView *view in self.subviews) {
if ([view isKindOfClass:[UIButton class]]) {
++buttonCount;
if (buttonCount == 1) {
button1 = (UIButton *)view;
} else if (buttonCount == 2) {
button2 = (UIButton *)view;
}
}
}
// make sure that button1 is as wide as both buttons initially are together
button1.frame = CGRectMake(button1.frame.origin.x, button1.frame.origin.y, CGRectGetMaxX(button2.frame) - button1.frame.origin.x, button1.frame.size.height);
// make sure that button2 is moved to the next line,
// as wide as button1, and set to the same x-position as button1
button2.frame = CGRectMake(button1.frame.origin.x, CGRectGetMaxY(button1.frame) + 10, button1.frame.size.width, button2.frame.size.height);
// now increase the height of the (alert) view to make it look nice
// (I know that magic numbers are not nice...)
self.bounds = CGRectMake(0, 0, self.bounds.size.width, CGRectGetMaxY(button2.frame) + 15);
}
@end
您现在可以像使用任何其他 UIAlertView :
一样使用您的课程[[[VerticalAlertView alloc] initWithTitle:@"Title"
message:@"This is an alert message!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:@"Second Button", nil] autorelease] show];
您将得到以下结果:
编辑:
使用这种方法有点风险(更不用说hacky),因为Apple可能会在某些时候改变 UIAlertView 的实现,这可能会破坏你的布局。我只想指出,这对您的问题来说是一个简单快捷的解决方案。如 UIAlertView 参考文献中所述:
“UIAlertView类旨在按原样使用,但不是 支持子类化。此类的视图层次结构是私有的 不得修改。“
答案 1 :(得分:4)
默认情况下不可能。在nycynik的答案中显示的外观是当你有两个以上的按钮时会发生什么。
所以,要么添加另一个按钮,要么可以查看第三方解决方案,例如this library,尽管我还没有测试过。
答案 2 :(得分:1)
为UIAlertAction
创建UIAlertController
时,只需为标题添加一些空格。即使它们在显示时会被修剪,iOS也会垂直放置按钮。
使用4.7“设备在iOS 10.3.1上测试。 即使对于按钮标题1个字符长度,这个空间量也足够了:
NSString* space = @" ";
对于3.5英寸,4英寸和5.5英寸的设备,它很可能也没问题。
答案 3 :(得分:0)
您可以使用包含许多换行符“\ n \ n \ n”的占位符消息来创建所需的空间。比在AlertView顶部添加自定义按钮。这当然是一个黑客 - 不是一个非常可靠的解决方案。但是没有直接的解决方案,只有两个按钮出现在彼此之上。使用三个或更多按钮,无论如何都是默认行为。
答案 4 :(得分:0)
你应该尝试:
UIAlertView *dialog = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Message"
delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:@"Download Next Chapter", nil];
[dialog show];
答案 5 :(得分:0)
此外,当您添加2个以上的按钮时,它们将由IOS垂直分配。
你可以使用简单的UIAlertController
$('button').filter(function(){
return $(this).data('color')=='yellow';
}).removeClass('active');
答案 6 :(得分:0)
是的,它是可能的,它默认出现。 如果添加2个以上的按钮,它将自动进入垂直堆叠,并且您的按钮将在警报中以垂直位置显示。 其次,如果要显示的文本的长度更多,那么即使按钮的计数为2,如果将采用垂直堆栈,则默认情况下也是如此。
理想情况下,屏幕中的警报具有超出它的特定高度和宽度,它将自动调整是否采用水平堆叠或垂直方向的按钮。 虽然您可以创建自定义按钮并提醒显示。
答案 7 :(得分:-3)
是的,这是一个包含代码和页面的页面教程:
http://mobile.tutsplus.com/tutorials/iphone/uialertview/
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Hello World!"
message:@"This is your first UIAlertview message."
delegate:self
cancelButtonTitle:@"Button 1"
otherButtonTitles:@"Button 2", @"Button 3", nil];
[message show];
答案 8 :(得分:-3)
使用此功能:
UIAlertView *alert = [[[UIAlertView alloc]
initWithTitle:@"Title"
message:@"Two Vertical Button"
delegate:nil
cancelButtonTitle:@""
otherButtonTitles:@"Button 1", @"Button 2",
nil]
autorelease];
[[alert viewWithTag:1] removeFromSuperview];
[alert show];