UITextView shouldInteractWith 委托在警报完成中返回值

Posted

技术标签:

【中文标题】UITextView shouldInteractWith 委托在警报完成中返回值【英文标题】:UITextView shouldInteractWith delegate returning value in alert completion 【发布时间】:2021-08-17 20:11:14 【问题描述】:

我在可以包含 URL 的表格视图单元格内有一个文本视图。当用户点击 URL 时,我想显示一个警报,以确保用户在处理 URL 之前想要继续。我试图在正确的委托方法中实现这一点,但我被卡住了,因为返回值不能在警报的完成块中。如何在从该方法返回之前等待用户做出选择?

相关代码:

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool 
        var alert = UIAlertController(title: "Are you sure?", message: "You are about to leave the app to open an external link", preferredStyle: .alert)
        let yesAction = UIAlertAction(title: "Yes", style: .default)  _ in
            alert.dismiss(animated: true) 
                // return true would go here
            
        
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)  _ in
            alert.dismiss(animated: true) 
                // return false would go here
            
        
        alert.addAction(cancelAction)
        alert.addAction(yesAction)
        UIApplication.shared.firstKeyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
        // Traditionally the return should go here
    

【问题讨论】:

【参考方案1】:

让代表等待响应是不好的做法。我的解决方案是

alert.dismiss(animated: true) 
    UIApplication.shared.open(url)

并向委托返回 false。这样,我将 URL 处理留给我的代码而不是 ios 原生行为

【讨论】:

以上是关于UITextView shouldInteractWith 委托在警报完成中返回值的主要内容,如果未能解决你的问题,请参考以下文章

当 UITextView 的文本超出 1 行时展开 UITextView 和 UITableView

选择另一个 UITextView 时,如何阻止 UITextView 退出第一响应者/关闭键盘?

从 UIView 中的 UITextView 复制文本后,UITextView 更改为 UIWebDocumentView?

UITextView 数据变化迅速

UITextView contentInset 在 iOS 7 上的 UITextView 中不起作用?

UITextView 设置属性后做啥?