2014-10-14 13 views
10

Uygulamamda entegre bir paylaşım uzantısı var ancak SLComposeServiceViewController'da düğme başlıkları değiştirmek ve metin görünümü için arka plan rengini ayarlamak gibi proje gereksinimlerine göre birkaç değişiklik yapmak istiyorum. başlığı. Bunu nasıl yaparım?SLComposeServiceViewController'ı özelleştirin. Paylaşım eklentisini açın iOS 8

+0

[dokümantasyon] (https://developer.apple.com/library/mac/documentation/Social/Reference/SLComposeServiceViewController_Class/) yardımcı olmalıdır. – twe4ked

+0

Ayrıca, SLComposeServiceViewController –

cevap

5

Birisi buna yardımcı olabilirse sorumu yanıtlıyorum. Birçok makale ve okumadan sonra aşağıdaki çözümü buldum. Çünkü denemek için yeterli içerik yok.

Bazı özelleştirmeler yapabileceğim şekilde temel sınıfı SLComposeServiceViewController'ı UIViewController olarak değiştiriyorum. Bildiğimiz gibi biz de evernote gibi pop-up ekleyebiliriz, ayrıca bu pop-up'a animationt uygulayabiliriz.

Sen böyle bir şey yapabileceği için viewController.Where ait viewddidload yönteminde sonrası yöntem geri arama alabilirsiniz: Eğer url bağlantısını edinmek kod Yukarıdan

- (void)viewDidLoad { 
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject; 
    NSItemProvider *itemProvider = item.attachments.firstObject; 

    if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) { 
     [itemProvider loadItemForTypeIdentifier:@"public.url" 
             options:nil 
           completionHandler:^(NSURL *url, NSError *error) { 
            NSString *urlString = url.absoluteString; 
            NSLog(@"%@",urlString); 

          }]; 
    } 
} 

. Daha fazla bilgi almak için sadece görüntü ve diğer şeyleri almak için sadece elma dokümantasyonuna başvurunuz.

Apple Documentation

+1

'un özelleştirilmesi hakkında daha fazla bilgi arıyorum Aynı belgede, UTI tipleri için MobileCoreServices'te tanımlanan sabitlerin kullanılmasının tercih edildiğini düşünüyorum. gibi bir şey: 'if ([currentItem hasItemConformingToTypeIdentifier: (__ köprü NSString *) kUTTypeURL])' –

2

Sen mesela değiştirebilir bunu yaparak SLComposeServiceViewController ait düğme başlıkları: - bu 8,4

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    for(UIView* v in self.navigationController.navigationBar.subviews){ 
     if(![v isKindOfClass:[UIButton class]]){ 
      continue; 
     } 
     UIBarButtonItem* b = (UIBarButtonItem*)v; 
     if([b.title isEqualToString:@"Post"]){ 
      b.title = @"Save"; 
     } 
    } 
} 

Not Bu Xcode 6.4 itibariyle çalışan SLComposeServiceViewController

+2

Bu artık Xcode 6.2'de çalışır. – CamQuest

0

belgesiz iç yapıları dayalı kırılgan bir çözümdür ve iOS

class CustomServiceViewController: SLComposeServiceViewController { 
    override func viewDidLoad() { 
     let navigationBar = view.subviews.first?.subviews?.last? as? UINavigationBar 
     let postButton = navigationBar?.subviews.last? as? UIButton 
     let cancelButton = navigationBar?.subviews.last? as? UIButton 
     postButton?.setTitle("Done", forState: .Normal) 
    } 
} 

uyardı onun viewDidAppear ve viewDidLoad değil. Düğme aslında bir UINavigationButton örneğidir, ancak onu genel muhatabı olan bir UIBarButtonItem öğesine uyguladım. Apple'ın geçmişini gözden geçirip edemeyeceğini doğrulayamadım çünkü özel bir API kullanabileceğini iddia edebilirler. Mesaj başlığı diğer dillere yerelleştirilirse bu işe yaramaz, ancak bu büyük bir sorun değildir çünkü başlığı değiştirmek purley kozmetiktir. Bazı ülkelerdeki soldan sağa sorun nedeniyle, altyazı sırasına göre başlığı değiştirmek konusunda tereddütlü olurum, ancak yapılması gereken tek şey kalın/kenarlıklı olup olmadığını kontrol etmektir.

1

Post button metnini değiştirmek için, büyük olasılıkla incelemeyi geçmesi gereken bir Swift çözümü (henüz deneme yapmadım). Bir SLComposeServiceViewController alt sınıfta yapın:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    // Reset Post button text. 
    for item in (self.navigationController?.navigationBar.items)! { 
     if let rightItem = item.rightBarButtonItem { 
      rightItem.title = "Save" 
      break 
     } 
    } 
} 
+0

Mükemmel! teşekkür ederim ! – Alfi