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?