2014-10-14 8 views
10

I Ho integrato l'estensione di condivisione nella mia app ma voglio fare alcune modifiche nel popup SLComposeServiceViewController come per i requisiti del progetto come cambiare i titoli dei pulsanti e impostare il colore di sfondo per la visualizzazione del testo e intestazione. Come lo faccio?Personalizza SLComposeServiceViewController pop-up dell'estensione di condivisione iOS 8

+0

Il [documentazione] (https://developer.apple.com/library/mac/documentation/Social/Reference/SLComposeServiceViewController_Class/) dovrebbe aiutare. – twe4ked

+0

Sto anche cercando ulteriori informazioni sulla personalizzazione di SLComposeServiceViewController –

risposta

5

Sto rispondendo alla mia domanda se qualcuno potesse aiutarlo. Dopo aver letto molti articoli e aver letto ho trovato la seguente soluzione. Perché non c'è abbastanza contenuto da provare.

Ho modificato la classe base SLComposeServiceViewController come UIViewController in modo da poter eseguire alcune personalizzazioni. Quindi, come sappiamo, possiamo aggiungere popup come evernote, inoltre possiamo applicare animazioni a quel popup.

È possibile ottenere metodo POST di richiamata nel metodo viewddidload del vostro viewController.Where si può fare qualcosa di simile:

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

          }]; 
    } 
} 

Dall'alto codice è possibile ottenere link URL. per ulteriori informazioni per ottenere immagini e altre cose è meglio fare riferimento solo alla documentazione Apple.

Apple Documentation

+1

Penso che nella stessa documentazione si accenna che è preferibile utilizzare le costanti definite in MobileCoreServices per i tipi di UTI. qualcosa come: 'if ([currentItem hasItemConformingToTypeIdentifier: (__ bridge NSString *) kUTTypeURL])' –

2

È possibile modificare ad esempio i titoli dei pulsanti di SLComposeServiceViewController in questo modo:

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

essere avvertito - è una soluzione fragile, sulla base di interni privi di documenti di SLComposeServiceViewController

+2

Questo non funziona più da Xcode 6.2. – CamQuest

0

Questo funziona come di Xcode 6.4 e 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"; 
     } 
    } 
} 

Nota è in viewDidAppear e non viewDidLoad. Il pulsante è in realtà un'istanza di UINavigationButton tuttavia l'ho lanciato su un UIBarButtonItem che è la sua controparte pubblica. Non ho verificato se questo supererà la revisione di Apple perché potrebbero argomentare l'utilizzo di un'API privata. Se il titolo del post viene localizzato in altre lingue, questo non funzionerà, ma non è un grosso problema perché la modifica del titolo è puramente estetica. Sarei titubante nel cambiare il titolo in base al suo ordine di sottotitoli, a causa del problema da destra a sinistra in alcuni paesi, tuttavia una cosa che si potrebbe fare è controllare che sia in grassetto/con bordi e che sia il pulsante post.

1

Per modificare il testo del pulsante Post, ecco una soluzione Swift che molto probabilmente dovrebbe passare in rassegna (attenzione che non ho ancora provato). Farlo in un SLComposeServiceViewController sottoclasse:

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

Perfetto! grazie ! – Alfi