2012-09-25 10 views
16

Poiché il nuovo SDK è stato rilasciato (iOS 6), il metodo delegato documentInteractionController:canPerformAction: di UIDocumentInteractionControllerDelegate è obsoleto.Apri in + UIDocumentInteractionController: come filtrare le opzioni in SDK iOS 6 (canPerformActions è obsoleto)

Utilizzando tale metodo, è possibile impedire la visualizzazione di azioni predefinite come print: e copy:.

Il metodo viene chiamato nella versione corrente di iOS 6, ma nelle versioni future questo metodo non verrà chiamato e la mia app mostrerà azioni che non voglio supportare.

Ho letto la documentazione disponibile per UIDocumentInteractionController e il suo delegato e non sono in grado di trovare un altro modo per fare ciò che faccio nel metodo canPerformAction.

Qualche idea?

Come un vantaggio, sarebbe bello poter filtrare app come posta o twitter (che appare di default) ma immagino che questo non sia possibile.

risposta

6

Penso che sia perché Apple vuole che tu usi il nuovo controllo UIActivity.

qui è la documentazione:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html

Qui si tratta di un controllo personalizzato sviluppato per supportare molte applicazioni di terze parti:

http://www.cocoacontrols.com/platforms/ios/controls/uiactivitycollection

E questa domanda risolve come si potrebbe fare il proprio UIActivity:

https://stackoverflow.com/a/12766330/736384

Quindi, se non si desidera che l'utente può usare copia: e stampa: metodi basta passare queste attività al UIActivityViewController, in questo modo:

[activityView setExcludedActivityTypes:[NSArray arrayWithObjects:UIActivityTypeCopyToPasteboard, UIActivityTypePrint, nil]]; 

Tutto il le attività predefinite sono elencate nella parte inferiore del collegamento alla documentazione di Apple.

+0

Ehi ..Grazie per la risposta! Non ho visto quella venuta di jaja che scaverò in questo, ma a prima vista sembra essere il futuro. Grazie ancora! – Omer

+12

quindi ... se fosse vero, come aprirei un file in un'altra applicazione (attualmente funziona con UIDocumentInteractionController's openWith ... e QuickLookPreview?). AFAICS non supporta questo in UIActivityViewController (oltre al fatto che UIActivityViewController ha anche alcune limitazioni piuttosto severe) – auco

+5

Accetto con auco - come puoi ora aprire in ... xlxs o simili con iOS6? – Rossi

7

Concordato sul fatto che deprecare "canPerformAction" nel delegato è problematico, abbiamo perso il controllo a grana fine che avevamo.

Tuttavia, se tutto ciò che si desidera è consentire l'apertura di un documento in un'altra app e la necessità di rimuovere Copia, Stampa e anche Posta, suppongo che sia meglio utilizzare la versione OpenIn per presentare lo UIDocumentInteractionController?

vale a dire per il vostro UIDocumentInteractionController uso presentOpenInMenuFromBarButtonItem:animated: o presentOpenInMenuFromRect:inView:animated:

(invece di presentOptionsMenuFromBarButtonItem:animated: o presentOptionsMenuFromRect:inView:animated:)

In questo modo, per impostazione predefinita, si mostrano solo le applicazioni che possono aprire il documento, e nasconde Mail, Copia e Stampare.

+1

In questo modo anche il resto delle opzioni non è disponibile (FB, Twitter, ecc.). Cosa succede se qualcuno vuole avere OpenIn e FB ..? – Vive

+0

Sul simulatore potrebbero non esserci app installate per aprire il contenuto e il menu non verrà visualizzato. Vedi questo Q & A: http://stackoverflow.com/questions/23624218/presentopeninmenufrombarbuttonitem-doesnt-cause-menu-to-appear – Suragch

+0

Non rende le altre opzioni non disponibili btw. Ed è attualmente il solo modo di condividere su Instagram, per esempio. Il triste stato della condivisione/comunicazioni inter-app iOS. –

Problemi correlati