2015-05-05 97 views
24

我有UIActivityViewController有4個選項:留言/郵件/ TW/FB。 我想爲每個選項發送不同的活動!爲UIActivityViewController設置不同的活動項目Swift

對於如: 在iMessage片,我需要把:StringNSURLUIImage。 在郵件中,我需要將字符串放在主題字段中,然後字符串放在主體中,UIImageNSURL也是。 在TW/FB我想放置圖像像社會職位後做了,也有一些字符串和NSURL

你有任何想法,如果這是可能的iOS8,與斯威夫特?

我搜索了很多的代碼段,沒有找到最適合我的。

回答

39

您應該利用UIActivityItemSource協議。 UIActivityViewController初始值設定項的activityItems參數接受實現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") 
    } 
} 

上述項目源根據活動類型返回不同的字符串數據對象,主題和縮略圖。要使用,你只需要將它傳遞給UIActivityViewController初始值設定項。

UIActivityViewController(activityItems: [MyStringItemSource()], applicationActivities: nil) 

同樣,你可以自定義一個類MyUrlItemSource返回根據所選擇的活動不同的URL,並在初始化一起傳遞。

UIActivityViewController(activityItems: [MyStringItemSource(), MyUrlItemSource()], applicationActivities: nil) 

所有這一切的正式文件中概述了UIActivityViewControllerUIActivityItemSource

+0

非常感謝! – Bonnke

+0

好人,好感! –

+0

此代碼可用於objective-c嗎? –

2

相同的解決方案就像從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") 
} 

}

0

的Objective-C相當於hennes回答:

@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 
相關問題