Kullanıcının facebook, twitter vb. Tarafından paylaşılıp paylaşılmadığını izleyebilmeyi istersiniz, ancak hangi yöntemin seçildiğini bilmenin bir yolu yoktur. Var mı?UIActivityViewController - hangi aktivitenin seçildiğini öğrenmenin bir yolu var mı?
cevap
Sen setCompletionHandler
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
if([activityType isEqualToString: UIActivityTypeMail]){
NSLog(@"Mail");
}
if([activityType isEqualToString: UIActivityTypePostToFacebook]){
NSLog(@"Facebook");
}
}];
[self presentViewController:activityVC animated:TRUE completion:nil];
sistem yerleşik olduğu için destek için Dahili aktivite türlerini Etkinlik Türleri kullanabilirsiniz.
NSString *const UIActivityTypePostToFacebook;
NSString *const UIActivityTypePostToTwitter;
NSString *const UIActivityTypePostToWeibo;
NSString *const UIActivityTypeMessage;
NSString *const UIActivityTypeMail;
NSString *const UIActivityTypePrint;
NSString *const UIActivityTypeCopyToPasteboard;
NSString *const UIActivityTypeAssignToContact;
NSString *const UIActivityTypeSaveToCameraRoll;
Düzenlendi iOS 8
bu iOS 8'de bir derleyici uyarısı oluşturur unutmayınız için, bunun yerine setCompletionHandler
yöntemi setCompletionWithItemsHandler
yöntemi kullanmak gerekir.
değiştirin:
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
ile:
[activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
Teşekkürler Bu yardımcı oluyor! Sonradan aldıklarını bilmem gerekiyorsa, bu iyidir, ama önceden de bilmem gerek. Örneğin, birisi twitter düğmesine basarsa, Facebook ile yaptığımdan farklı bir mesaj görüntülemek istiyorum – Adam
"UIActivityItemSource" protokolüne uyan özel veri nesnelerini uygulamanız gerekir. Daha sonra verilerinizi etkinlik türüne özel bir biçimde sunabilirsiniz (veya sadece türü takip edebilirsiniz). [NSHipster] (http://nshipster.com/uiactivityviewcontroller/) tüm ayrıntılara sahiptir. – hagi
sadece posta seçeneği görüntülenir? Birden fazla seçenek nasıl eklenebilir? –
sadece kendi protokolünü uygulayarak aktivitesi ile özel veri dokundu edildiği etkinlik belirlemek ve dönmek için bu lib https://github.com/rdougan/RDActivityViewController kullanabilirsiniz. Bu gibi
:
- (NSArray *)activityViewController:(NSArray *)activityViewController itemsForActivityType:(NSString *)activityType
{
if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
return @[@"Twitter text"];
} else if ([activityType isEqualToString:UIActivityTypeMessage]) {
return @[@"Message text"];
} else if ([activityType isEqualToString:UIActivityTypeMail]) {
return @[@"Mail text"];
} else if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
return @[@"Facebook text"];
} else {
return @[@"Default text"];
}
}
Sana yardımcı olmuştur umut! Swift 2'de
Bu protokol çağrısı nedeniyle uygulamam reddedildi. Anlaşılan özel bir API. Bu kütüphaneyi kullanmayın. –
:
activityViewController.completionWithItemsHandler = { activity, success, items, error in
if !success{
print("cancelled")
return
}
if activity == UIActivityTypePostToTwitter {
print("twitter")
}
if activity == UIActivityTypeMail {
print("mail")
}
}
hızlı 3
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [screenCapture], applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo]
activityViewController.completionWithItemsHandler = { activity, success, items, error in
if !success{
print("cancelled")
return
}
if activity == UIActivityType.postToFacebook {
print("facebook")
}
if activity == UIActivityType.mail {
print("mail")
}
}
self.present(activityViewController, animated: true, completion: nil)
Daima
güzel ben soracaktım soru görmek için. – Morkrom