如何在 Swift 中将 UIActivity 复制更改为复制 UIActivityViewController 中的链接
Posted
技术标签:
【中文标题】如何在 Swift 中将 UIActivity 复制更改为复制 UIActivityViewController 中的链接【英文标题】:How to change UIActivity Copy to copy Link in UIActivityViewController in Swift 【发布时间】:2020-11-07 03:29:06 【问题描述】:当共享的项目是链接时,如何更改文本以复制链接
我试过了,但它没有按预期工作
@objc(CustomUIActivity) 类CustomUIActivity:UIActivity 私有变量 url = NSURL() 覆盖类 var activityCategory: UIActivity.Category 返回 .share 覆盖 var activityType: UIActivity.ActivityType? 返回 .customuiactivity 覆盖 var activityTitle:字符串? 返回“复制链接” 覆盖 var activityImage: UIImage? 返回 UIImage(命名:“图标复制”) 覆盖 func canPerform(withActivityItems activityItems: [Any]) -> Bool 对于activityItems中的activityItem 如果让 _ = activityItem 为? NSURL 返回真 返回假 var textToShare:字符串? 覆盖 func prepare(withActivityItems activityItems: [Any]) 对于activityItems中的activityItem 如果让 url = activityItem 为? NSURL self.url = 网址 覆盖函数执行() // 执行你的自定义活动 UIPasteboard.general.string = url.absoluteString 活动完成(真) 扩展 UIActivity.ActivityType 静态让 customuiactivity = UIActivity.ActivityType("com.productHunt.copyLink")这里我附上了我所期望的截图
【问题讨论】:
尝试向我们展示您的尝试 是的,试过了,但没有如我所愿,我已经更新了我的问题 看来你得到了答案 是的,我得到了答案 很高兴听到这个消息 【参考方案1】:“复制”是系统提供的默认项目,您无法更新,因为 UIActivity.activityTitle 是只读的。
但是,你可以添加自定义活动项,你几乎做了相同的下面是我的版本
class CustomUIActivity : UIActivity
var _activityTitle: String
var _activityImage: UIImage?
var activityItems = [Any]()
var action: ([Any]) -> Void
private var url = URL(string: "Nil")
init(title: String, image: UIImage?, performAction: @escaping ([Any]) -> Void)
_activityTitle = title
_activityImage = image
action = performAction
super.init()
override var activityTitle: String?
return _activityTitle
override var activityImage: UIImage?
return _activityImage
override var activityType: UIActivity.ActivityType?
return UIActivity.ActivityType(rawValue: "com.productHunt.copyLink")
override class var activityCategory: UIActivity.Category
return .action
override func canPerform(withActivityItems activityItems: [Any]) -> Bool
for activityItem in activityItems
if let _ = activityItem as? URL
return true
return false
override func prepare(withActivityItems activityItems: [Any])
for activityItem in activityItems
if let url = activityItem as? URL
self.url = url
self.activityItems = activityItems
override func perform()
print("URL : \(String(describing: url?.absoluteString))")
UIPasteboard.general.string = url?.absoluteString
action(activityItems)
activityDidFinish(true)
你可以调用初始化这个CustomUIActivity如下:
let customItem = CustomUIActivity(title: "Copy Link", image: UIImage(named: "icon-copy")) sharedItems in
for string in sharedItems
print("Here's the string: \(string) ")
let items: [Any] = ["This app is my favorite", URL(string: "https://www.google.com")!]
let ac = UIActivityViewController(activityItems: items, applicationActivities: [customItem])
present(ac, animated: true)
这将起作用,并复制链接:
【讨论】:
以上是关于如何在 Swift 中将 UIActivity 复制更改为复制 UIActivityViewController 中的链接的主要内容,如果未能解决你的问题,请参考以下文章
如何在集合视图的底部/页脚中添加 uiactivity 指示器?
如何从 UIActivity 控制器中删除“添加到 iCloud Drive”?
如何在 Swift 3 中保存 UITableViewCell 附件复选标记的状态
如何从 UIActivity 视图控制器中选择的 UIActivity 项目中呈现 ModalViewController?