简单的UIAlertView与NSAttributedString(s)

我正在寻找一个简单的方法来使用一个非常简单的消息框类似于NSAttributedString

 NSString *new_item = [NSString stringWithFormat:@"<span style=\"font-family: Helvetica Neue; font-size: 12.0\">%@</span>", @"MOTD HTML String downloaded from website"]; NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[new_item dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MOTD" message:attrStr delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; 

我上面的代码需要一个HTML格式的string,已经从服务器上下载,确保文本大小适合屏幕,然后尝试将NSAttributedString发送到UIAlertView 。 但是UIAlertView不喜欢这个。 这个问题最简单的方法是什么?(非HTML格式的MOTD不是一个选项)

将您的属性string添加到标签,并添加它作为assessoryView警报

 UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Test Attributed String" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil]; UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:@"Hello red"]; [attributedStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)]; lbl.attributedText = attributedStr; lbl.textAlignment = NSTextAlignmentCenter; [alert setValue:lbl forKey:@"accessoryView"]; [alert show]; 

现在一天UIAlertView已被弃用。 你可以使用UIAlertController

我只从@AshishKakkad的答案中得到一个想法(+1)。 但是,其UI不可见。 所以我正在向你展示一种使用Javastring格式化消息的方法。

以下是我如何做到这一点:

 NSMutableString *message = [NSMutableString string]; NSString *title = @"Message Heading"; [message appendString:title]; [message appendString:@"\n\n• Topic 1"]; [message appendString:@"\n• Topic 2"]; [message appendString:@"\n• Topic 3\n"]; //Important, I have added '\n' at last to have some extra space at bottom. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"" delegate:self cancelButtonTitle:@"CancelButton" otherButtonTitles:@"OtherButton", nil]; //need to set a label as `accessoryView` of an alert. [alert setValue:[self getLabelWithMessage:message withTitle:title] forKey:@"accessoryView"]; [alert show]; 

 - (UILabel *)getLabelWithMessage:(NSMutableString *)message withTitle:(NSString *)title { NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setAlignment:NSTextAlignmentLeft]; paragraphStyle.paragraphSpacing = 2.0f; paragraphStyle.headIndent = 20.0; paragraphStyle.firstLineHeadIndent = 20.0; paragraphStyle.tailIndent = -20.0; NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:message]; [attribString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [message length])]; [attribString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12.f] range:NSMakeRange(0, [message length])]; [attribString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:12.f] range:NSMakeRange(0, [title length])]; UILabel *label = [[UILabel alloc] init]; [label setAttributedText:attribString]; [label setNumberOfLines:0]; [label sizeToFit]; return label; } 

在这里输入图像说明

不要忘记设置:

lbl.numberOfLines = 0;

当你有多条线路