Dessen Blick ist nicht in die Fenster-Hierarchie-Problem?
Warnung: Versuchen Sie zu präsentieren, auf dessen Sicht nicht in die Fenster-Hierarchie!
Ja, ich habe mir die anderen Fragen und Antworten vor dem posten dieser Frage. Sie haben nicht geholfen mich zu lösen. Hier ist, was ich Tue. Ich rufe auf meiner singleton-Klasse socialHelper anzeigen eine Aktion, Blatt, wo postToFacebook
Methode ist eine option, um Sie auszuwählen. Wenn Sie auf diese Aktion, ich bekomme die Warnung vor und die postToFacebook
wird nicht angezeigt. Ich rufe diese von einem UIViewController mit dem UINavigationController
als die Haupt-controller, und mein SocialHelper Klasse ist ein NSOject
.
- (void)postToFacebook
{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
slComposeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[slComposeViewController setInitialText:@"Building stairs? Checkout StairsPro on the app store!"];
[slComposeViewController addImage:[UIImage imageNamed:@"StairsIcon120x120.png"]];
[slComposeViewController addURL:[NSURL URLWithString:@"https://itunes.apple.com/us/app/stairs-pro/id477032819?ls=1&mt=8"]];
[self presentViewController:slComposeViewController animated:YES completion:nil];
//I've also tried this, which shows the post window, but after hitting cancel or post, my previous viewController is not the current viewController. So my navigation bar is gone and can't move around in my app.
//[[[[UIApplication sharedApplication]delegate]window]setRootViewController:slComposeViewController];
}else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"No Facebook Account" message:@"No Facebook account has been configured. You can configure or create a Facebook account in settings." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alert show];
}
}
Also, was ich Frage, ist, was ist der beste Weg, um die slComposerViewController
für die Anzeige in diesem Fall auch, wie konnten wir das UIApplication
option. Danke!
SocialHelper
eigentlich auf dem Bildschirm?Nichts zeigt auf dem Bildschirm, wenn es heißt, soweit die PostToFacebook Fenster. Nur den Bildschirm habe ich genannt. Aber die UActionSheet funktioniert, dann traf ich einen Post auf Facebook, und ich bekomme die Warnung und die UIActionSheet geht Weg, und nur wieder auf den Bildschirm rief ich es aus.
presentViewController:animated:completion:
muss aufgerufen werden, aus der viewController, der aktuell auf dem Bildschirm dargestellt. Wenn SocialHelper
ist nicht die aktuell präsentierten viewController, dann sollten Sie nicht den Aufruf dieser Methode aufIch versuchte, verschieben alles auf der UIViewController-Klasse, das angezeigt wird, und bekam die gleiche Warnung.
Sind Sie sicher, dass Sie das Recht haben, viewController?
InformationsquelleAutor Jason | 2014-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde die Methode zu übergeben, in dem ViewController, um sicherzustellen, dass die korrekte VC präsentiert es so:
Und innerhalb der Methode beim Aufruf presentViewController verwenden:
Ich dann annehmen, dass mit Ihrer socialHelper singleton-Klasse wäre so etwas wie:
Ihre zweite Frage über die Verwendung der rootViewController versuchen Sie dies:
Edit: Da die ersten beiden Vorschläge nicht Arbeit für Ihr Projekt, versuchen Sie, die oberste ViewController und präsentiert slComposeViewController von es statt "self" etwa so:
Hier ist, was ich habe...MainViewController mit einem UINavigationController, seine FlipsideViewController für Einstellungen, dann Schaltfläche "über" - Seite, die auch ein UIViewController. Ich habe den log in den, wo die UIActionSheet genannt wird, aus (Zeigt UINavigation ist den aktuellen ViewController). Die Methode für die UIActionSheet ist in der socialhelper Klasse NSObject. Ich habe Versucht, bewegen alles, um den Über UIViewController-Klasse...das gab das gleiche Ergebnis. Hoffe, das hilft
versucht Ihr topViewController, etwas nicht tun. Keine Fehler oder Abstürze, einfach nichts.
Perfekte Lösung vielen Dank!
InformationsquelleAutor rymagno
Diese Antwort wird nicht Ihr Problem beheben, aber es sollte einen Sinn, warum es nicht funktioniert und helfen Sie zu finden die richtige Lösung für das, was Sie ursprünglich beabsichtigten.
SLComposeViewController
einUIViewController
hat eine zugeordneteUIView
angezeigt werden oben in der Ansicht von der Steuerung empfangen der NachrichtpresentViewController
.Als richtig gemacht in dieser Zeile aber
self
mussUIViewController
(ein Objekt, das eine Ansicht-Eigenschaft).Wird es funktionieren, wenn Sie Ihr
-postToFaceBook
Methode aus derSocialHelper
Klasse und legte es in IhreUIViewController
Klasse (Datei), wird die Anzeige der Aktion Blattes, so dass Art und Weiseself
ist eigentlich einUIViewController
stattNSObject
.Vom Apple UIViewController Referenz Seite:
Ihre
SocialHelper
Klasse ist nicht ein view-controller so dass Sie nicht haben, eine Ansicht, der die action-Blatt-Ansicht Hinzugefügt werden könnten, um Sie anzuzeigen (auf der Oberseite).Ich denke auch wenn Sie Erben Ihre
SocialHelper
ausUIViewController
, den Blick auf IhreSocialHelper
wäre nicht in Ihrem controller ' s view-Hierarchie.Wenn es nur zwei oder drei view-Controller, wo Sie brauchen, um die Anzeige der action-Blatt, ich würde replizieren Sie den code erstellen, anstatt eine separate Klasse, wenn es mehrere view-Controller, dann macht es Sinn, die action-Blatt-display Logik als eine separate Klasse, die Sie gerade brauchen, um das richtige design pattern, das zu tun.
Bearbeiten 1
Vergaß zu erwähnen, dass die Deklaration der variable fehlt das
SLComposeViewController *
Ist es nur fehlt in deinem post, oder Sie haben deklariert die variable irgendwo in Ihrem viewcontroller-Klasse?
Versuchen, deklarieren Sie es genau dort in der gleichen Zeile, die Sie erstellen, die
SLComposeViewController
; das könnte das Problem beheben. Wenn das nicht funktioniert, dann überprüfen Sie alles, was Sie tun müssen, um Unterstützung von Facebook in Ihrer app, indem Sie bei dieser Suche sehr einfach und leicht zu Folgen tutorial.Ich nehme an, Sie haben Ihre Navigations-controller mit Haupt-view-controller als root:
Werden und die flip-side-controller, den Sie in der Haupt-view-controller:
Die Kehrseite controller verfügt über die Taste, um die Ansicht beim Tippen; ich denke, Sie machen einen presentViewController kein push:
Schließlich, in der über view-controller sollten Sie Ihre -postToFacebook Methode mit der korrigierten Zeile oben erwähnt; wird aufgerufen, indem Sie die log (Taste?).
InformationsquelleAutor Only You