如何制作一个多行、左对齐的UIAlertView?

19

我想制作一个左对齐的UIAlertView,带有多行文本,就像公告列表一样,看起来应该像下面这样:

  • 第一行
  • 第二行
  • 第三行

以下是我目前拥有的内容:

alert = [[UIAlertView alloc] initWithTitle: @"How to use buttons"
                                   message: @"line 1. line 2, line 3 "
                                  delegate: nil
                         cancelButtonTitle: @"OK"
                         otherButtonTitles: nil];

我也想把警告视图的颜色改为红色。

5个回答

31

使用 Unicode 代码 0x2022 表示项目符号。使用“\n”表示换行可以使其正常工作:

UIAlertView *alert = [[UIAlertView alloc]
            initWithTitle: @"How to use buttons"
            message: [NSString stringWithFormat: @"%C line 1.\n %C line 2,\n %C line 3", (unichar) 0x2022, (unichar) 0x2022, (unichar) 0x2022];
            delegate: nil
            cancelButtonTitle:@"OK"
            otherButtonTitles:nil];

对于项目符号,那应该可以正常工作。

针对左对齐,可以这样做:

NSArray *subViewArray = alertView.subviews;
for(int x = 0; x < [subViewArray count]; x++){

    //If the current subview is a UILabel...
    if([[[subViewArray objectAtIndex:x] class] isSubclassOfClass:[UILabel class]]) {
        UILabel *label = [subViewArray objectAtIndex:x];
        label.textAlignment = NSTextAlignmentLeft;
    }
}

综上所述:

  • 使用"\n"来显示换行符
  • [NSString stringWithFormat:@"%C Line n", (unichar) 0x2022];用于项目符号
  • 对于对齐方式,遍历警告视图的子视图,并确定哪些子视图是UILabel的子类。然后使用label.textAlignment = NSTextAlignmentLeft将标签的文本对齐改为左对齐。
  • 在您完成所有这些操作之后,可以调用[alert show];

你好,现在是居中对齐。我想要左对齐并带有项目符号。如果您有更长的文本,您会发现它们是居中对齐的。 - DavidNg
你的详细回答让我觉得很有帮助,给你点个赞。 - JSA986
2
此外,在制作项目符号时,你需要进行类型转换以防止 Xcode 显示警告:[NSString stringWithFormat:@"%C Line n", (unichar) 0x2022] - uɥƃnɐʌuop
3
@pasawaya 左对齐的代码似乎不起作用。首先,我假设你是指 NSArray *subViewArray = alert.subviews;,因为 alertView.subviews 不存在。其次,在我将此代码放在初始化 alert 之后时,subViewArray 没有任何对象。我错过了什么吗? - JeffB6688
@pasawaya 左对齐的代码在iOS 9上似乎不起作用。 - Alexander Poleschuk
显示剩余4条评论

4

向左对齐:

 NSArray *subviewArray = alert.subviews;
for(int x = 0; x < [subviewArray count]; x++){

    if([[[subviewArray objectAtIndex:x] class] isSubclassOfClass:[UILabel class]]) {
        UILabel *label = [subviewArray objectAtIndex:x];
        label.textAlignment = UITextAlignmentLeft;
    }

要在警报视图背后显示红色背景:

alert.backgroundColor=[UIColor redColor];

1
从qegals的代码中借鉴并进行了调整。@DavidNg,我可以建议您接受他的答案,并可能给在这里帮助过您的人点个赞。 - JSA986

2

请确保使用反斜杠\而不是普通的正斜杠/。

在我的键盘上,按下alt + shift + 7即可。

\n

这样应该就可以了。 :-)


1
您可以在消息中插入\n来创建一个新行。例如:
@"line 1.\nline 2,\nline 3"

1

对于新行和文本对齐,我建议使用@qegal的答案,那个完美无缺,但如果您想更改颜色或自定义警报视图,我有一个很棒的类可用,代替系统的警报视图,请查看this,这肯定有效。 它还将帮助您获得对齐和项目符号列表的多行消息。

如果您在使用中遇到任何问题,请寻求帮助,我肯定会帮助您解决。

编码愉快 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接