Uiactivityviewcontroller настройка текста на основе выбранного действия
Я хочу настроить текст для той же информации, но когда я делюсь им на Facebook, я не хочу использовать хэш-теги twitter или схему @username...
Как я могу диверсифицировать текст для совместного использования на основе того, какая служба общего доступа будет использоваться?
конечно, я использую UIActivityViewController:
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil];
3 ответов
вместо передачи текстовых строк в initWithActivityItems
звоните, проходите в свой собственный подкласс UIActivityItemProvider
класс и когда вы реализуете itemForActivityType
метод он предоставит службу общего доступа в качестве параметра "activityType".
затем вы можете вернуть настроенное содержимое от этого метода.
Я взял этот ответ и сделал для него простой класс. Сообщение по умолчанию будет видно в других торговых точках, кроме Twitter, а для слов Twitter в массиве хэш-слов появятся хэши, если они присутствуют в сообщении по умолчанию. Я думал, что поделюсь ею с кем-нибудь еще, кому она нужна. Спасибо Кристофер!
использование:
TwitterHashActivityItemProvider *twit = [[TwitterHashActivityItemProvider alloc] initWithDefaultText:@"I really like stackoverflow and code"
hashWords:@[@"stackoverflow", @"code"]];
NSArray *items = @[twit];
UIActivityViewController *act = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
:
@interface TwitterHashActivityItemProvider : UIActivityItemProvider
- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems;
@property (nonatomic,strong) NSArray *hashItems;
@end
реализация:
#import "TwitterHashActivityItemProvider.h"
@implementation TwitterHashActivityItemProvider
- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems;
{
self = [super initWithPlaceholderItem:text];
if ( self )
{
self.hashItems = hashItems;
}
return self;
}
- (id)item
{
if ( [self.placeholderItem isKindOfClass:[NSString class]] )
{
NSString *outputString = [self.placeholderItem copy];
// twitter gets some hash tags!
if ( self.activityType == UIActivityTypePostToTwitter )
{
// go through each potential hash item and augment the main string
for ( NSString *hashItem in self.hashItems)
{
NSString *hashed = [@"#" stringByAppendingString:hashItem];
outputString = [outputString stringByReplacingOccurrencesOfString:hashItem withString:hashed];
}
}
return outputString;
}
// else we didn't actually provide a string...oops...just return the placeholder
return self.placeholderItem;
}
@end
пример реализации Swift подкласса uiactivityitemprovider. Опция копировать будет использовать только пароль, другие типы действий будут использовать полный текст общего доступа. Должно быть легко настроить для различных случаев использования. Спасибо Cristopher & NickNack за их ответы.
class PasswordShareItemsProvider: UIActivityItemProvider {
private let password: String
private var shareText: String {
return "This is my password: " + password
}
init(password: String) {
self.password = password
// the type of the placeholder item is used to
// display correct activity types by UIActivityControler
super.init(placeholderItem: password)
}
override var item: Any {
get {
guard let activityType = activityType else {
return shareText
}
// return desired item depending on activityType
switch activityType {
case .copyToPasteboard: return password
default: return shareText
}
}
}
}
использование:
let itemProvider = PasswordShareItemsProvider(password: password)
let activityViewController = UIActivityViewController(activityItems: [itemProvider], applicationActivities: nil)