UIActivityViewController
でメール共有の件名を設定し、Twitterでも共有したい。 Twitterで共有したいかどうかを知っています。テキストを140文字に圧縮する必要があります。多くのSOソリューションをチェックしましたが、何も機能していません。
この問題は最新のiOSリリースで修正されていますか?他の「実用的なソリューション」はありますか?
Emreoktemの解決策setValue:forKey:
をUIActivityViewController
に送信することは文書化されていないようです。
IOS 7以降では、UIActivityItemSource
プロトコルに準拠するオブジェクトにactivityViewController:subjectForActivityType:
メソッドを実装して、文書化されている方法でこれを行うことができます。
メールの件名を設定するためのメールの以下のコードを確認してください。
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で電子メールオプションを選択した場合、「電子メールの件名」として件名を作成します。
私はそれが役立つことを願っています...
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)
受け入れられた答えに基づいた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)