如何在 UIAlertController 中提供超链接操作?

Posted

技术标签:

【中文标题】如何在 UIAlertController 中提供超链接操作?【英文标题】:How to give hyperlink action in UIAlertController? 【发布时间】:2020-02-14 08:13:44 【问题描述】:

我无法单击 UIAlertController 中的超链接。我想在点击超链接时打开外部浏览器。

-(void)viewDidAppear:(BOOL) animated 
    NSString *htmlString = @"Welcom to AlertView for more information <A href=\"https://www.google.com\"> Click Here </A>";
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@""
                                                                     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];

点击“点击这里”然后应该打开外部浏览器。是否可以在 UIAlertView 中获得超链接点击动作?

【问题讨论】:

这能回答你的问题吗? Swift UIAlertController with url in text 【参考方案1】:

我认为这是可能的,但我认为 Apple 指南不建议这样做。 相反,您应该将标题设置为“欢迎使用此 AlertView,有关更多信息,请查看我们的网站”,例如使用两个按钮“确定”和“不,谢谢”。 用户过去常常单击本机按钮而不是警报控制器中的文本。希望对您有所帮助。

【讨论】:

【参考方案2】:

我认为添加一个默认操作按钮会更好,可能标题为“更多信息”,这将负责打开网址,但您可以看看这个same question。

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"Welcome to AlertView" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *linkAction = [UIAlertAction actionWithTitle:@"More info" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) 
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString: yourUrl]];
    ];
    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) 
        // OK button tappped.
        [self dismissViewControllerAnimated:YES completion:^ ];
    ];
    [alert addAction:linkAction];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:true completion:nil];

【讨论】:

不知道为什么有人不赞成这个答案。这是让“更多信息”处于警报状态但仍遵循 Apple 指南的好方法。 @trungduc:答案与我的问题无关。添加更多信息选项可以轻松完成。这是基本的。 @Yalamandarao 如果是这种情况,您应该发表评论让他知道。对于您的问题,这是有可能的,但由于修改系统组件,您的应用程序很有可能会被拒绝。另一种方法是创建一个看起来与系统警报完全相同的组件。这需要一段时间。 @Yalamandarao 正如我所说,看看我在回答中发布的link,他们试图实现与您相同的目标,因此您在这里有两个选项 .

以上是关于如何在 UIAlertController 中提供超链接操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中旋转 UIAlertController

如何在 UIAlertController 中添加 UIPickerView?

如何在 iOS 中处理多个 UIAlertController?

在 Swift 中点击返回键时如何关闭 UIAlertController?

如何在 UIAlertController 中更改 UIAlertAction 的字体大小和颜色

iOS UI 测试:如何获取 UIAlertController 的消息