我该如何添加分享按钮?IOS8中使用Swift。

3
我希望我的应用程序中有一个按钮,当按下它时,这个(见下图)弹出。我该怎么做?我不想创建自定义共享扩展,我只想要默认的。我应该使用什么代码?所有在线教程都是用Objective-C编写的。请用Swift给出答案。
图像:http://9to5mac.com/2014/06/30/hands-on-1password-beta-shows-off-ios-8s-touch-id-extensions-apis-video/#jp-carousel-330420 以下是我的代码,但我收到一个错误,即UIBarButtonItem无法转换为UIVIew。为什么?该操作连接到导航栏按钮项?
@IBAction func ActionButton(sender: UIBarButtonItem) {

    let firstActivityItem = "Text you want"
    let secondActivityItem : NSURL = NSURL(string: "http//:urlyouwant")!
    // If you want to put an image
    let image : UIImage = UIImage(named: "TALogo")!

    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! UIBarButtonItem)

    // 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个回答

6

方法是使用UIActivityViewController,例如以下方式:

@IBAction func shareSheet(sender: AnyObject) {

    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)
}

上述代码适用于iPhone和iPad,因为在iOS 8中设置新的popoverPresentationController也适用于iPad。

如果使用UIBarButtonItem,则需要替换以下行:

activityViewController.popoverPresentationController?.sourceView = (sender as! UIButton)

使用这个:

activityViewController.popoverPresentationController?.barButtonItem = (sender as! UIBarButtonItem)

我希望这能对您有所帮助。


请重新阅读我的回答,我在注释中写明了适用于iPad,它适用于两种情况。 - Victor Sigler
这个应用在iPad上使用时崩溃了,为什么? - nachshon fertel
Facebook和Twitter可以与我上面的代码很好地配合使用,分享文本、链接和图片都没问题。但要小心Facebook,因为它在应用程序下载等方面可能会出现一些问题。这只发生在Facebook上,因为其政策发生了变化! - Victor Sigler
我尝试这样做,但是出现了一个错误,提示:“UIBarButtonItem无法转换为UIVIew”。请参考更新后的问题。 - nachshon fertel
在视图具有UIBarButtonItem的情况下,popoverPresentationController有一个名为barButtonItem的属性。 - Victor Sigler
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接