@IBAction func share(_ sender: Any) {
let textToShare = "yourShareString";
let imageToShare = UIImage.init(named: "yourImageName")
let urlToShare = URL.init(string: "yourShareLink")
let activityItems = [imageToShare!,urlToShare!,textToShare] as [Any];
let activity: UIActivityViewController = UIActivityViewController.init(activityItems: activityItems, applicationActivities: nil)
self.present(activity, animated: true, completion: nil)
}
看到這里蝙泼,大家可能想說(shuō)炕置,so easy 誰(shuí)都會(huì)嘛渣锦。你如果直接這樣分享到facebook 或者 twitter的時(shí)候你會(huì)發(fā)現(xiàn)結(jié)果是這樣的:
Paste_Image.png
細(xì)心點(diǎn)的同學(xué)就會(huì)發(fā)現(xiàn),where is my share link?
我想說(shuō)的设褐,我也不知道哪兒去了颠蕴,不過(guò)你可以在textToShare后面拼接上要分享的鏈接泣刹,如圖:
Paste_Image.png
但是看起來(lái)都長(zhǎng)到一塊兒去了助析,別急,慢慢來(lái)椅您。微信的分享很與眾不同外冀,假如你只想分享一條文字,或者一條文字和圖片到微信:
@IBAction func share(_ sender: Any) {
let textToShare = "yourShareString";
let imageToShare = UIImage.init(named: "yourImageName")
let activityItems = [imageToShare,textToShare] as [Any];
let activity: UIActivityViewController = UIActivityViewController.init(activityItems: activityItems, applicationActivities: nil)
self.present(activity, animated: true, completion: nil)
}
貌似是不行的掀泳,它會(huì)變成這樣:
Paste_Image.png
因?yàn)槲⑿诺姆窒矶际切枰猆RL的雪隧,而且你還不能把URL的string寫(xiě)成"":
let urlToShare = URL.init(string: "")
它會(huì)報(bào)found nil的錯(cuò)誤:
fatal error: unexpectedly found nil while unwrapping an Optional value
這個(gè)是比較坑爹的西轩,加上正確格式的url之后就是正常的啦:
Paste_Image.png
細(xì)心的同學(xué)又會(huì)發(fā)現(xiàn)text后面拼接的url在微信里面展示出來(lái)了,這該怎么辦呢,看到這里脑沿,僅僅使用那些上面的字符串拼接的方式不行了藕畔,得使用UIActivityItemProvider了
@IBAction func share(_ sender: Any) {
let textToShare = "yourShareString";
let imageToShare = UIImage.init(named: "yourImageName")
let itemProvider = customItemProvider.init(placeholderItem: "")
let activity: UIActivityViewController = UIActivityViewController.init(activityItems: [imageToShare!,textToShare,itemProvider], applicationActivities: nil)
self.present(activity, animated: true, completion: nil)
}
class customItemProvider: UIActivityItemProvider {
override init(placeholderItem: Any) {
super.init(placeholderItem: placeholderItem)
}
override func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return ""
}
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
if activityType == .postToFacebook || activityType == .postToTwitter {
return "https://baidu.com"
} else {
return URL.init(string: "https://baidu.com")//wechat need a URL
}
}
}
r結(jié)果如下:
Paste_Image.png
Paste_Image.png
總之,微信分享比較特殊庄拇,它只能只有一張圖片注服,或者一定要給一個(gè)有效的URL(不是string),而且給了URL沒(méi)有給圖片的時(shí)候它會(huì)自己生成一個(gè)灰色的??icon措近,UED同學(xué)可就不樂(lè)意了溶弟。于是乎比較規(guī)范的方式是定義三個(gè)不同的itemProvider,如下:
class ImageItemProvider: UIActivityItemProvider {
override init(placeholderItem: Any) {
super.init(placeholderItem: placeholderItem)
}
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
if activityType == .postToFacebook || activityType == .postToTwitter {
return nil//臉書(shū)和推特不需要圖片的時(shí)候返回nil就沒(méi)有圖片了
} else {
return UIImage.init(named: "yourImageName")//覺(jué)得微信自己生成的圖片太丑的時(shí)候可以返回一個(gè)瞭郑,即時(shí)返回nil辜御,它也會(huì)自動(dòng)生成??圖片
}
}
}
class UrlItemProvider: UIActivityItemProvider {
override init(placeholderItem: Any) {
super.init(placeholderItem: placeholderItem)
}
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
if activityType == .postToFacebook || activityType == .postToTwitter {
return "https://baidu.com"
} else {
return URL.init(string: "https://baidu.com")//wechat need a URL
}
}
}
class TitleItemProvider: UIActivityItemProvider {
override init(placeholderItem: Any) {
super.init(placeholderItem: placeholderItem)
}
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
if activityType == .postToFacebook || activityType == .postToTwitter {
return "faceBook or twitter"
} else {
return "wechat"
}
}
}
j:
Paste_Image.png
Paste_Image.png
twitter has no icon and wechat has