2014-10-14 20 views
10

Mam zintegrowane rozszerzenie udziału w mojej aplikacji, ale chcę zrobić kilka modyfikacji w wyskakującym okienku SLComposeServiceViewController zgodnie z wymaganiami projektu, jak zmienić tytuły przycisków i ustawić kolor tła dla widoku tekstu i nagłówek. Jak mogę to zrobić?Dostosuj SLComposeServiceViewController pop up rozszerzenia udziału iOS 8

+0

Sieć [dokumentacja] (https://developer.apple.com/library/mac/documentation/Social/Reference/SLComposeServiceViewController_Class/) powinno pomóc. – twe4ked

+0

Szukam również więcej informacji na temat dostosowywania SLComposeServiceViewController –

Odpowiedz

5

Odpowiadam na moje pytanie, czy ktoś może pomóc w tym. Po przejrzeniu wielu artykułów i lektur wymyśliłem następujące rozwiązanie. Ponieważ nie ma wystarczającej ilości treści do wypróbowania.

Zmieniam klasę podstawową SLComposeServiceViewController jako UIViewController, dzięki czemu mogę wykonać pewne dostosowywanie. Tak więc, jak wiemy, możemy dodać wyskakujące okienko, takie jak evernote, ale możemy też zastosować animację do tego okna.

można uzyskać metodą POST zwrotnego w metodzie viewddidload swojej viewController.Where można zrobić coś takiego:

- (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); 

          }]; 
    } 
} 

znad kodu można uzyskać URL. Aby uzyskać więcej informacji, aby uzyskać obraz i inne rzeczy najlepiej odnieść się tylko do dokumentacji Apple.

Apple Documentation

+1

Myślę, że w tej samej dokumentacji wspomina, że ​​lepiej jest używać stałych zdefiniowanych w MobileCoreServices dla typów UTI. coś takiego: 'if ([currentItem hasItemConformingToTypeIdentifier: (__ bridge NSString *) kUTTypeURL])' –

2

można zmienić na przykład tytuły przycisk SLComposeServiceViewController w ten sposób:

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) 
    } 
} 

Ostrzegamy - to delikatne rozwiązanie, oparte na nielegalnych wewnętrznych części SLComposeServiceViewController

+2

To nie działa już od Xcode 6.2. – CamQuest

0

Działa to jak z Xcode 6.4 i iOS 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"; 
     } 
    } 
} 

Uwaga jego w viewDidAppear, a nie viewDidLoad. Przycisk jest faktycznie instancją UINavigationButton, ale rzutuję go na UIBarButtonItem, który jest jego publicznym odpowiednikiem. Nie zweryfikowałem, czy przejdzie to przez przegląd Apple, ponieważ mogą twierdzić, że używa prywatnego API. Jeśli tytuł postu zostanie zlokalizowany w innych językach, to nie zadziała, ale to nie jest wielka sprawa, ponieważ zmiana tytułu jest purley kosmetyczne. Byłbym niezdecydowany, aby zmienić tytuł na podstawie jego polecenia podglądu, ze względu na problem od prawej do lewej w niektórych krajach, jednak jedną rzeczą, którą można zrobić, jest sprawdzenie pogrubienia/graniczenia, który będzie przyciskiem postu.

1

Aby zmienić tekst przycisku "Wyślij", oto rozwiązanie Swift, które powinno najprawdopodobniej przejść weryfikację (co jest zastrzeżeniem, którego jeszcze nie próbowałem). Zrób to w SLComposeServiceViewController podklasy:

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

Idealny! Dziękuję Ci ! – Alfi