Ustawianie różnych pozycji aktywności dla interfejsu UIActivityViewController Swift
Mam UIActivityViewController
z 4 opcjami: wiadomość / Poczta / TW / FB.
Chcę wysłać różne działania dla każdej opcji!
Dla eg:
W iMessage
arkuszu, muszę umieścić : String
, NSURL
, i UIImage
.
W mailu muszę umieścić string w polu Subject, następnie String W body, UIImage
i NSURL
również.
W {[7] } chcę umieścić obrazek tak jak zrobił to post socials, również jakiś String i NSURL
.
Czy masz pojęcie, czy jest to możliwe w iOS8, z Swift ?
Szukałem wiele dla niektórych kawałków kodu, nie znalazł dla mnie najlepszego.
3 answers
Powinieneś skorzystać z protokołu UIActivityItemSource
. Parametr activityItems
inicjalizatora UIActivityViewController
akceptuje tablicę obiektów danych lub tablicę obiektów implementujących protokół UIActivityItemSource
.
Jako przykład rozważ źródło elementu, jak poniżej.
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")
}
}
Powyższy element source zwraca różne obiekty, tematy i obrazy miniatur w zależności od typu aktywności. Aby użyć, wystarczy przekazać go do UIActivityViewController
inicjalizator.
UIActivityViewController(activityItems: [MyStringItemSource()], applicationActivities: nil)
Podobnie można zdefiniować klasę MyUrlItemSource
, która zwraca różne adresy URL w zależności od wybranej aktywności i przekazuje ją w inicjalizatorze.
UIActivityViewController(activityItems: [MyStringItemSource(), MyUrlItemSource()], applicationActivities: nil)
Wszystko to jest opisane w oficjalnej dokumentacji dla UIActivityViewController
oraz UIActivityItemSource
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 19:15:35
To samo rozwiązanie jak z hennes przetłumaczone na 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")
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 09:54:52
Objective-C odpowiednik hennes odpowiedź:
@interface MyStringItemSource : NSObject <UIActivityItemSource>
{
}
@end
@implementation MyStringItemSource
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
return @"";
}
-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(UIActivityType)activityType
{
if (activityType == UIActivityTypeMessage) {
return @"String for message";
} else if (activityType == UIActivityTypeMail) {
return @"String for mail";
}
return nil;
}
-(NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(UIActivityType)activityType
{
if (activityType == UIActivityTypeMessage) {
return @"Subject for message";
} else if (activityType == UIActivityTypeMail) {
return @"Subject for mail";
}
return @"";
}
-(UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(UIActivityType)activityType suggestedSize:(CGSize)size
{
if (activityType == UIActivityTypeMessage) {
return [UIImage imageNamed: @"thumbnail-for-message"];
} else if (activityType == UIActivityTypeMail) {
return [UIImage imageNamed: @"thumbnail-for-mail"];
}
return [UIImage imageNamed: @"thumbnail-for-default"];
}
@end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 09:03:28