IOS

2013-11-26 17 views
17
yılında havadan yardım uyarı açıklaması özelleştirme

ben göndermek için aşağıdaki kodu var bir URLAirDrop içinden:IOS

NSString* selfUrlScheme = [[[[[[NSBundle mainBundle] 
           infoDictionary] 
           valueForKey:@"CFBundleURLTypes"] 
          objectAtIndex:0] 
          valueForKey:@"CFBundleURLSchemes"] 
          objectAtIndex:0]; 

NSURL* schemeURL = [NSURL URLWithString: 
        [NSString stringWithFormat: 
        @"addList:%@,%@", 
        self.list.uniqueID, 
        selfUrlScheme]]; 

NSArray *objectsToShare = @[schemeURL]; 
controller = [[UIActivityViewController alloc] 
       initWithActivityItems:objectsToShare 
       applicationActivities:nil]; 

// Exclude all activities except AirDrop 
    NSArray *excludedActivities = @[UIActivityTypePostToTwitter, 
            UIActivityTypePostToWeibo, 
            UIActivityTypeAssignToContact, 
            UIActivityTypeSaveToCameraRoll, 
            UIActivityTypeAddToReadingList, 
            UIActivityTypePostToFlickr, 
            UIActivityTypePostToVimeo, 
            UIActivityTypePostToTencentWeibo]; 
controller.excludedActivityTypes = excludedActivities; 
[self presentViewController:controller animated:YES completion:nil]; 

alıcı sonra aşağıdaki iletiyi alır:

enter image description here

o mümkün mü 'X paylaşmak istersiniz' sonra bulunan URL metnini değiştirmek 'X seninle bir liste paylaşmak istiyorum' gibi daha kullanıcı dostu bir şey? Şimdiden teşekkürler!

DÜZENLEME

şimdi bu var ama hala yukarıdaki aynı sonucu üretilen: Sen UIActivityItemSource protokolüne uygun bir sınıf uygulamak gerekecek

AirDropCustomURL *container = [[AirDropCustomURL alloc] initWithUrl:schemeURL]; 
NSString *message = @"a list"; 
controller = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; 

@interface AirDropCustomURL : NSObject <UIActivityItemSource> 

@property (strong, nonatomic) NSURL *url; 
@property (strong, nonatomic) UIImage *productImage; 
- (id)initWithUrl:(NSURL *)url; 

@implementation AirDropCustomURL 

- (id)initWithUrl:(NSURL *)url { 
    if (self = [super init]) { 
     _url = url; 
    } 
    return self; 
} 

#pragma mark - UIActivityItemSource 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    //Because the URL is already set it can be the placeholder. The API will use this to determine that an object of class type NSURL will be sent. 
    return self.url; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    //Return the URL being used. This URL has a custom scheme (see ReadMe.txt and Info.plist for more information about registering a custom URL scheme). 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
     return nil; 
    } else { 
     if ([activityType isEqualToString:UIActivityTypeAirDrop]) { 
      return self.url; 
     } 
    } 
    return nil; 
} 
+0

Sanırım bunun için şansınız yok ... benim düzenlenmiş cevabımı görün. –

cevap

7

. Burada çok güzel bir örnek var: https://developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html. Özellikle APLCustomURLContainer bir göz atın. Eğer URL konteyner sınıf uygulamak sonra (özel mesaj olacaktır) bir dize ile birlikte etkinlik öğeleri ekleyebilir

MyURLContainer *container = [[MyURLContainer alloc] initWithURL:yourURL]; 
NSString *message = @"Your message"; 
UIActivityViewController activityController = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; 

DÜZENLEME:

Ben iki telefonu yoktu İlk başta bunu denemek için çalıştım, bu yüzden sadece doğru bir şekilde çalıştığı Facebook ve Twitter için test ettim, ancak AirDrop için şimdi (bazı testlerden sonra) her zaman NSURL'nin göreliString'ini kullandığını ve hatta NSURL'in bu yöntemini geçersiz kıldığınızı doğrulayabilirim AirDrop (FB gibi diğer faaliyetler tamam) için geçerli olmayacak, bu mesajı mevcut SDK ile değiştirmek mümkün değil.

+0

Bunu nereden buldunuz? Çünkü bunları bağladığınız örnek kodda yapmazlar. –

+0

Az önce gönderdiğim örnek kod developer.apple.com adresinden geliyor ve ben tam olarak bunu yapıyorum - MyURLContainer, örnekteki APLCustomURLContainer gibi UIActivityItemSource protokolüne uygun bir NSObject alt sınıfı olmalıdır. Ayrıca, init yöntemi için activityItems parametresini açıklayan UIActivityViewController belgelerini de kontrol edebilirsiniz - https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIActivityViewController_Class/Reference/Reference.html#// apple_ref/oks/instm/UIActivityViewController/initWithActivityItems: applicationActivities :. –

+0

@IvanGenchev beni düzenle –

1

URL'un description numarasını kullanıyor gibi görünüyor. NSURL alt sınıfını denemek ve @"a list" gibi bir şey döndürmek için description yöntemini geçersiz kılmaya çalışırdım. Bunu denemek, ama işe yarayabilir gibi görünüyor ...

EDIT vermedi: seninki ile aynı olacak şekilde gözüküyor bu soruyu buldum ve kabul edilen bir cevabı var: Airdrop: making a custom URL scheme be less ugly for recipient

+0

Bir alt sınıf NSURL sınıfındaki açıklamayı geçersiz kılmayı denedim, ancak şans yok. – Skela

+0

Tamam, o zaman sanırım yanlış olduğu için cevabın o kısmını çıkarmalıyım. Teşekkürler. –

2

İhtiyacınız eğitici HERE'u takip etmek için. "UIActivityViewController'a Hızlı Bakış" başlığının ardından, tam olarak aradığınız şeyi düşünüyorum.

UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil]; 
[self presentViewController:controller animated:YES completion:nil]; 
0

Bu soru, uzun bir süre önce gönderilmiştir. @ Ivan'ın cevabını yanı sıra yazıdaki diğer cevapları denedim, ancak işe yaramıyorlar!

Aslen resmim soldaki resim. AirDrop aracılığıyla özel verileri paylaşıyorum ve UIActivityController tarafından "data-3A4F9D ...", orz. Benim elde etmek istediğim, daha açıklayıcı bir başlıktır, böylece alıcı için daha okunabilir olur (sağdaki resim). NSURL'u paylaşırken NSData'u paylaşmama rağmen, soruna çok benziyor gibi görünüyor.İşte

oldukça iyi çalışıyor, hangi yaptığımız şey: my UIActivityItemProvider Aşağıdaki UIActivityItemSource protokolünü uygulamak. Bu sorun hala devam yaşıyorsanız

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController 
      subjectForActivityType:(NSString *)activityType 
{ 
     // This returning string is added to the email title 
     return NSLocalizedString(@"CustomTitle", nil); 
} 

, bu denemeye çekinmeyin ve sizin için nasıl çalıştığını bana bildirin.