这是Twitter的一些代码和平......我想知道如何获得分享动作视图,就像我们在ios堆栈照片应用程序中获得...
@IBAction func twitterButton(sender: AnyObject) {
let image: UIImage = UIImage(named: "LaunchScreenImage.png")!
let twitterControl = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
twitterControl.setInitialText("")
twitterControl.addImage(image)
let completionHandler = {(result:SLComposeViewControllerResult) -> () in
twitterControl.dismissViewControllerAnimated(true, completion: nil)
switch(result){
case SLComposeViewControllerResult.Cancelled:
print("User canceled", terminator: "")
case SLComposeViewControllerResult.Done:
print("User tweeted", terminator: "")
}
}
twitterControl.completionHandler = completionHandler
self.presentViewController(twitterControl, animated: true, completion: nil)
}
答案 0 :(得分:24)
let firstActivityItem = "Text you want"
let secondActivityItem : NSURL = NSURL(string: "http//:urlyouwant")!
// If you want to put an image
let image : UIImage = UIImage(named: "image.jpg")!
let activityViewController : UIActivityViewController = UIActivityViewController(
activityItems: [firstActivityItem, secondActivityItem, image], applicationActivities: nil)
// This lines is for the popover you need to show in iPad
activityViewController.popoverPresentationController?.sourceView = (sender as! UIButton)
// This line remove the arrow of the popover to show in iPad
activityViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.allZeros
activityViewController.popoverPresentationController?.sourceRect = CGRect(x: 150, y: 150, width: 0, height: 0)
// Anything you want to exclude
activityViewController.excludedActivityTypes = [
UIActivityTypePostToWeibo,
UIActivityTypePrint,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo
]
self.presentViewController(activityViewController, animated: true, completion: nil)
答案 1 :(得分:8)
@IBAction func shareButtonClicked(sender: AnyObject)
{
//Set the default sharing message.
let message = "Message goes here."
//Set the link to share.
if let link = NSURL(string: "http://yoururl.com")
{
let objectsToShare = [message,link]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList]
self.presentViewController(activityVC, animated: true, completion: nil)
}
}
这将允许您呈现UIActivityViewController以与任何将接受它们的应用程序共享链接和消息。
答案 2 :(得分:8)
extension UIApplication {
class var topViewController: UIViewController? { return getTopViewController() }
private class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController { return getTopViewController(base: nav.visibleViewController) }
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController { return getTopViewController(base: selected) }
}
if let presented = base?.presentedViewController { return getTopViewController(base: presented) }
return base
}
}
extension Hashable {
func share() {
let activity = UIActivityViewController(activityItems: [self], applicationActivities: nil)
UIApplication.topViewController?.present(activity, animated: true, completion: nil)
}
}
let str = "String"
str.share()
"Data to share".share()
1.share()
不要忘记在此处添加解决方案代码(见上文)
import UIKit
class ViewController: UIViewController {
private weak var imageView: UIImageView?
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(shareButtonTapped), for: .touchUpInside)
button.setTitleColor(.blue, for: .normal)
view.addSubview(button)
let imageView = UIImageView(frame: CGRect(x: 50, y: 120, width: 200, height: 200))
imageView.image = UIImage(named: "image")
imageView.isUserInteractionEnabled = true
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageViewTapped)))
view.addSubview(imageView)
self.imageView = imageView
}
@objc func shareButtonTapped() { "Data to share".share() }
@objc func imageViewTapped() { imageView?.image?.share() }
}
答案 3 :(得分:4)
我开发了@onemillion的回答:)你可以将它用于 Swift 3
override func viewDidLoad() {
super.viewDidLoad()
share(message: "selam", link: "htttp://google.com")
}
func share(message: String, link: String) {
if let link = NSURL(string: link) {
let objectsToShare = [message,link] as [Any]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
self.present(activityVC, animated: true, completion: nil)
}
}
答案 4 :(得分:2)
SWIFT 3.0更新
//首先将按钮添加到导航栏的功能
func addingNavBarBtn () {
// setting button's image
let comunicateImage = UIImage(named: "NavfShare")
let comunicateBtn = UIBarButtonItem(image: comunicateImage, style: .plain, target: self, action: #selector(shareButtonPressed))
comunicateBtn.tintColor = UIColor.white
self.navigationItem.rightBarButtonItem = comunicateBtn
}
//setting button's action
func shareButtonPressed(){
//checking the object and the link you want to share
let urlString = "https://www.google.com"
let linkToShare = [urlString!]
let activityController = UIActivityViewController(activityItems: linkToShare, applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)
}
答案 5 :(得分:1)
let items = ["Your Sharing Content"];
let activity = UIActivityViewController(activityItems: items, applicationActivities: nil);
self.present(activity, animated: true, completion: nil)
答案 6 :(得分:0)
@IBAction func shareButtonAction(_ sender: AnyObject) {
let activityVC = UIActivityViewController(activityItems: ["Whatever you want to share"], applicationActivities: nil)
activityVC.popoverPresentationController?.sourceView = self.view
present(activityVC, animated: true, completion: nil)
activityVC.completionWithItemsHandler = { (activityType, completed:Bool, returnedItems:[Any]?, error: Error?) in
if completed {
self.dismiss(animated: true, completion: nil)
}
}
}
答案 7 :(得分:-1)
@IBAction func action_shareOnSocial(_ sender: UIButton) {
// Converted to Swift 4 by Swiftify v4.1.6809 - https://objectivec2swift.com/
let theMessage = "Text you want to set , https://www.hackingwithswift.com/"
let items = [theMessage]
// build an activity view controller
let controller = UIActivityViewController(activityItems: items, applicationActivities: nil)
let popPresenter: UIPopoverPresentationController? = controller.popoverPresentationController
popPresenter?.sourceView = sender
// and present it
self.presentActivityController(controller)
}
func presentActivityController(_ controller: UIActivityViewController?) {
// for iPad: make the presentation a Popover
controller?.modalPresentationStyle = .popover
if let aController = controller {
present(aController, animated: true)
}
let popController: UIPopoverPresentationController? = controller?.popoverPresentationController
popController?.permittedArrowDirections = .any
popController?.barButtonItem = navigationItem.leftBarButtonItem
// access the completion handler
controller?.completionWithItemsHandler = { activityType, completed, returnedItems, error in
// react to the completion
if completed {
} else {
// user cancelled
print("We didn't want to share anything after all.")
}
}
}
答案 8 :(得分:-1)
针对 public people3input$ = new Subject<string>();
public people3$ = this.people3input$
.pipe(
debounceTime(200),
distinctUntilChanged(),
switchMap(term => this.api(term).pipe(
catchError(() => of([])), // empty list on error
))
);
在 JP Aquino的代码上进行改进,以改进导航控制器上的共享操作rightBarButtonItem。
在ViewController的 describe('people3$()', () => {
it('should call api', () => {
class MockApi {
search(term) {
console.log('I am never called')
return of(['test123'])
}
}
component.api = new MockApi().search;
component.people3input$.next('ttt');
component.people3input$.subscribe(result => expect(result).toEqual(['test123']))
});
});
中,执行以下操作:
Swift 5
然后在您的ViewController内部的某处实现viewDidLoad
方法:
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareBarButtonItemClicked(_:)))
编码愉快!