web-dev-qa-db-ja.com

UIActivityViewControllerでメールの件名を設定する方法は?

UIActivityViewControllerでメール共有の件名を設定し、Twitterでも共有したい。 Twitterで共有したいかどうかを知っています。テキストを140文字に圧縮する必要があります。多くのSOソリューションをチェックしましたが、何も機能していません。

この問題は最新のiOSリリースで修正されていますか?他の「実用的なソリューション」はありますか?

64
Femina

Emreoktemの解決策setValue:forKey:UIActivityViewControllerに送信することは文書化されていないようです。

IOS 7以降では、UIActivityItemSourceプロトコルに準拠するオブジェクトにactivityViewController:subjectForActivityType:メソッドを実装して、文書化されている方法でこれを行うことができます。

86
Tim Camber

メールの件名を設定するためのメールの以下のコードを確認してください。

UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"]
                                  applicationActivities:nil];
[avc setValue:@"Your email Subject" forKey:@"subject"];

avc.completionHandler = ^(NSString *activityType, BOOL completed) {
    // ...
};

ここで行

[avc setValue:@ "Your email Subject" forKey:@ "subject"];

ユーザーがUIActivityViewControllerで電子メールオプションを選択した場合、「電子メールの件名」として件名を作成します。

私はそれが役立つことを願っています...

92
emreoktem

Swift 2.0+&ios 8.0+

let title = "Title of the post"
let content = "Content of the post"
let objectsToShare = [title, content]

let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)      
activityVC.setValue(title, forKey: "Subject")
self.presentViewController(activityVC, animated: true, completion: nil)
16
PAC

受け入れられた答えに基づいたSwift 3.0 +の具体的なソリューションを次に示します。受け入れられた答えのように、これはiOS Mailアプリでのみ動作し、他のアプリで動作するとは限らないことに注意してください。

実装:

class MessageWithSubject: NSObject, UIActivityItemSource {

    let subject:String
    let message:String

    init(subject: String, message: String) {
        self.subject = subject
        self.message = message

        super.init()
    }

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

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        return message
    }

    func activityViewController(_ activityViewController: UIActivityViewController,
                                subjectForActivityType activityType: UIActivityType?) -> String {
        return subject
    }
}

使用法:

以下に使用例を示します。これをactivityItems配列の最初の項目として使用し、従う追加項目を含めるとうまく機能することに注意してください。

let message = MessageWithSubject(subject: "Here is the subject", message: "An introductory message")
let itemsToShare:[Any] = [ message, image, url, etc ]

let controller = UIActivityViewController(activityItems: itemsToShare, applicationActivities: nil)
10
biomiker