为UIActivityViewController Swift设置不同的活动项目

Bon*_*nke 34 ios uiactivityviewcontroller swift

我有UIActivityViewController4个选项:消息/邮件/ TW/FB.我想为每个选项发送不同的活动!

对于例如:在iMessage表,我需要把:String,NSURL,和UIImage.在Mail中,我需要在主题字段中放置字符串,然后在正文中放置字符串,UIImage以及NSURL.在TW/FB 我想放置图片像社交帖子做了它,也有一些字符串和NSURL.

你知道在iOS8中是否可以使用Swift吗?

我搜索了很多代码,但没有找到最适合我的代码.

hen*_*nes 50

你应该利用这个UIActivityItemSource协议.activityItems初始化程序的参数UIActivityViewController接受数据对象数组或实现UIActivityItemSource协议的对象数组.

例如,考虑以下项目来源.

class MyStringItemSource: NSObject, UIActivityItemSource {
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }

    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        if activityType == UIActivityTypeMessage {
            return "String for message"
        } else if activityType == UIActivityTypeMail {
            return "String for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "String for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "String for facebook"
        }
        return nil
    }

    func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {
        if activityType == UIActivityTypeMessage {
            return "Subject for message"
        } else if activityType == UIActivityTypeMail {
            return "Subject for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "Subject for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "Subject for facebook"
        }
        return ""
    }

    func activityViewController(activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: String!, suggestedSize size: CGSize) -> UIImage! {
        if activityType == UIActivityTypeMessage {
            return UIImage(named: "thumbnail-for-message")
        } else if activityType == UIActivityTypeMail {
            return UIImage(named: "thumbnail-for-mail")
        } else if activityType == UIActivityTypePostToTwitter {
            return UIImage(named: "thumbnail-for-twitter")
        } else if activityType == UIActivityTypePostToFacebook {
            return UIImage(named: "thumbnail-for-facebook")
        }
        return UIImage(named: "some-default-thumbnail")
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的项源根据活动类型返回不同的字符串数据对象,主题和缩略图.要使用,您只需将其传递给UIActivityViewController初始化程序即可.

UIActivityViewController(activityItems: [MyStringItemSource()], applicationActivities: nil)
Run Code Online (Sandbox Code Playgroud)

同样,您可以定义一个自定义MyUrlItemSource类,该类根据所选活动返回不同的URL,并在初始化程序中传递它.

UIActivityViewController(activityItems: [MyStringItemSource(), MyUrlItemSource()], applicationActivities: nil)
Run Code Online (Sandbox Code Playgroud)

所有这一切都为官方文档中列出UIActivityViewControllerUIActivityItemSource


小智 5

与从hennes翻译为swift 3相同的解决方案

class MyStringItemSource: NSObject, UIActivityItemSource {

  public func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
    return ""
  }

  public func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
    if activityType == UIActivityType.message {
      return "String for message"
    } else if activityType == UIActivityType.mail {
      return "String for mail"
    } else if activityType == UIActivityType.postToTwitter {
      return "String for twitter"
    } else if activityType == UIActivityType.postToFacebook {
      return "String for facebook"
    }
    return nil
  }

  public func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String {
    if activityType == UIActivityType.message {
      return "Subject for message"
    } else if activityType == UIActivityType.mail {
      return "Subject for mail"
    } else if activityType == UIActivityType.postToTwitter {
      return "Subject for twitter"
    } else if activityType == UIActivityType.postToFacebook {
      return "Subject for facebook"
    }
    return ""
  }

  public func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivityType?, suggestedSize size: CGSize) -> UIImage? {
    if activityType == UIActivityType.message {
      return UIImage(named: "thumbnail-for-message")
    } else if activityType == UIActivityType.mail {
      return UIImage(named: "thumbnail-for-mail")
    } else if activityType == UIActivityType.postToTwitter {
      return UIImage(named: "thumbnail-for-twitter")
    } else if activityType == UIActivityType.postToFacebook {
      return UIImage(named: "thumbnail-for-facebook")
    }
    return UIImage(named: "some-default-thumbnail")
  }

}
Run Code Online (Sandbox Code Playgroud)