2015-08-18 11 views
9

condivido alcuni contenuti utilizzando il seguente codiceschermata vuota dopo condividere contenuti utilizzando UIActivityViewController

var textToShare = "Test" 
let activityVC = UIActivityViewController(activityItems: [textToShare], applicationActivities: nil) 
activityVC.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact] 

presentViewController(activityVC, animated: true, completion: nil) 

Ma quando si preme il pulsante di annullare o quando il contenuto è condiviso con successo, l'applicazione mostra una schermata vuota.

Come risolvere questo problema?

UPDATE:

Lo schermo vuoto appare proprio quando seleziono mail o SMS app per il target di condivisione, per telegramma, Twitter e Facebook si sta lavorando perfetto.

Ho commentato tutto il codice all'interno dei metodi del ciclo di vita, Ancora lo stesso problema.

override func viewDidAppear(animated: Bool) 
{ 
    //setControlsAreHidden(true) 
} 

override func viewWillAppear(animated: Bool) 
{ 
    //if dataAddedToView 
    //{ 
    //  activityIndicator?.removeFromSuperview() 
    //} 

} 

override func viewWillDisappear(animated: Bool) 
{ 
    //setControlsAreHidden(false) 
} 
+0

questo progetto di demo può aiutarti: https://github.com/genedelisa/ActivityDemo –

+0

Ho controllato il tuo codice, e nel mio progetto funziona correttamente, penso che il problema possa essere da qualche parte in 'viewWillAppear' del tuo presentando il controller di visualizzazione. Puoi condividere più codice? –

+0

Sì, penso che il problema sia nel codice che non stai mostrando. Il codice nel controller di visualizzazione presentante sarebbe rilevante. – rholmes

risposta

1

ho avuto questo stesso problema, ed è stato in grado di risolverlo regolare dai vincoli di ridimensionamento della mia UIView primaria.

codice prima:

override func loadView() { 
    self.view           = UIView() 
    self.view.translatesAutoresizingMaskIntoConstraints = false 
} 

codice dopo:

override func loadView() { 
    self.view           = UIView() 
} 

Quindi, è sufficiente rimuovere self.view.translatesAutoresizingMaskIntoConstraints = false

Questo potrebbe non valere per tutti, ma in base alle risposte di altri popoli, non ci ho capito sono vari problemi con il modo in cui vengono visualizzate le visualizzazioni che possono causare lo stesso problema. Se la mia correzione non funziona per te, ti suggerisco di commentare tutto il codice non necessario fino a quando il problema non scompare, e quindi di riportare metodicamente piccoli bit in linea, eseguendo test lungo il percorso per identificare il problema.

+0

facendo ciò ha vinto ' t visualizzare più uno schermo vuoto ma i vincoli non sono corretti per me, quindi non verrà visualizzato come dovrebbe – NoSixties

1

È necessario innanzitutto verificare che il controller della vista non venga distrutto mentre si presenta il contenuto. Alcune istruzioni di debug nelle routine di gestione del ciclo di vita del controller di visualizzazione (ad es. ViewWillDisappear) potrebbero aiutare.

Se il problema deriva dal fatto che ViewController è scomparso, sarà necessario ricrearlo in modo appropriato.

Guarda anche in qualsiasi posto dove fornisci contenuti: è stato attivato per disegnare al momento giusto?

Inoltre, assicurarsi di utilizzare le API come richiesto (ad esempio, chiamando la superclasse in tutti i metodi in cui è richiesta, come le routine del ciclo di vita del controller di visualizzazione). Vedi:

Queste sono le aree vorrei concentrare la mia attenzione su e/o fornire il relativo codice per.

1

Come si sta presentando MFMailComposeViewController e MFMessageComposeViewController sopra la corrente UIViewController in modo che quando si elimina la MFMailComposeViewController o MFMessageComposeViewController dopo l'invio del messaggio, allora il metodo UIViewControllerviewWillAppear sarà chiamato come la vista sta comparendo di nuovo, in modo a mio assegno parere in viewWillAppear o viewWillDisappear metodo se si sta effettuando la visualizzazione nil.

1

Non vedo alcuna chiamata alla super implementazione nei propri metodi viewDidAppear, viewWillAppear o viewWillDisappear.

Cosa succede se si fa ?:

override func viewDidAppear(animated: Bool) 
{ 
    super.viewDidAppear(animated) 
    //setControlsAreHidden(true) 
} 

override func viewWillAppear(animated: Bool) 
{ 
    super.viewWillAppear(animated) 
    //if dataAddedToView 
    //{ 
    //  activityIndicator?.removeFromSuperview() 
    //} 

} 

override func viewWillDisappear(animated: Bool) 
{ 
    super.viewWillDisappear(animated) 
    //setControlsAreHidden(false) 
} 
+0

Grazie per la tua risposta, ma il problema non è stato risolto :( –

+0

Stai utilizzando un controller di navigazione? Forse dovresti presentarlo da lì invece? Come navigatore.Controllo presentViewController (...)? – fdiaz

1

Forse non sta presentando il controller della vista attività nella visualizzazione corretta, provare qualcosa di simile:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){ 
    activityViewController.popoverPresentationController.sourceView = self.view; 
} 

Si tratta di un codice obiettivo C , ma solo come esempio di come impostare la vista.

Se avete bisogno di come controllare la versione di iOS:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)