我想知道是否有办法在UIAlertController的消息中显示HTML。
Android有办法做到这一点,但我找不到在iOS上做同样的方法。我现在正在使用Swift 3.
答案 0 :(得分:0)
您可以使用UIAlertController
属性访问textFields
的文本字段。然后,您可以通过设置attributedText
来设置包含HTML的属性字符串。
答案 1 :(得分:0)
好吧,当rmaddy sugested时,我已经使用ViewController创建了一个自定义提醒。
我在StoryBoard中添加了一个ViewController,不透明度为75%。在它上面,有两个标签(警报和消息)和一个按钮(关闭整个事物)的视图。在关联的类中,唯一的代码是:
var alertTitle: String?
var messageContent: String?
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var AlertView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
AlertView.layer.cornerRadius = 5.0
let attrStr = try! NSAttributedString(
data: (messageContent?.data(using: String.Encoding.unicode, allowLossyConversion: true)!)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
titleLabel.text = alertTitle
messageLabel.lineBreakMode = .byWordWrapping
messageLabel.numberOfLines = 0
messageLabel.attributedText = attrStr
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func closeButtonTapped(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
基本上,这将收到将显示为标题的文本和消息(将是HTML)。
要使用该ViewController,我使用以下代码创建了一个函数:
func createAlert(title: String, message: String) {
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let alert = storyBoard.instantiateViewController(withIdentifier: "alert") as! AlertViewController
alert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
alert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
alert.alertTitle = title
alert.messageContent = message
self.present(alert, animated: true, completion: nil)
}
据我所知,它有效。消息看起来像没有样式的纯HTML文本(所以我需要纠正它),但它做了我需要的。
有点奇怪,iOS上的Alerts无法显示来自HTML的内容。我认为它可以是一个很好的功能。无论如何,感谢rmaddy的这种消化。这比我预想的要容易。
答案 2 :(得分:0)
我不想在我的项目中添加更多的类,因此我一直在寻找一种更直接的方法来实现。我发现this link很有帮助。
我的最终代码如下:
-(void)viewDidAppear:(BOOL) animated {
NSString *htmlString = @"<html><body><h1>HTML, baby!</h1><p>Try it.<p>You'll totally<br />love it.<br /><b>Sample Bold text</b></body></html>";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Welcome"
message:htmlString
preferredStyle:UIAlertControllerStyleAlert];
NSAttributedString *attributedStr = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil error:nil];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
// OK button tappped.
[self dismissViewControllerAnimated:YES completion:^{ }];
}];
[alert setValue:attributedStr forKey: @"attributedMessage"];
[alert addAction:defaultAction];
[self presentViewController:alert animated:true completion:nil];
}
我之所以加入viewDidAppear声明,是因为我在很长一段时间内有一个错字,因为从未调用整个函数,所以UIAlertController不会出现。