2013-04-16 14 views
5

Mam przycisk w mojej aplikacji, aby wywołać SLComposeViewController do użytku z Twitterem. Kiedy widok jest prezentowany, animuje się prawidłowo, a znika. Odkryłem, że kiedy znika, jest wysyłane na koniec bieżącego widoku i nie mam sposobu, aby go przywrócić. Próbowałem ręcznie wysyłając wszystkie widoki na wierzchu do tyłu w kodzie bez powodzenia. Czuję, że coś jest nie tak z moją aplikacją, ponieważ to zachowanie jest widoczne na dowolnym poziomie do kontrolera nawigacyjnego w aplikacji. Poniżej znajduje się zrzut ekranu SLComposeViewController będąc na pasku nawigacji w aplikacji, zrobiłem pogląd ViewController mają wartość alfa 0.0f zilustrować mój punkt widzenia:SLComposeViewController Widoki wysłane do aplikacji i przestają odpowiadać

enter image description here

ja naprawdę nie wiem, co się dzieje tutaj i każda pomoc będzie bardzo ceniona. Kod używam przedstawić SLComposeViewController jest dość standardowy i ja testowałem go w innej aplikacji i działa prawidłowo:

NSString *message = [NSString stringWithFormat:@"#%@", [twitterInfo objectForKey:@"hashtag"]]; 

if ([appDelegate isSocialAvailable]) { 
    // code to tweet with SLComposeViewController 
    SLComposeViewController *twitter = [[SLComposeViewController alloc] init]; 
    twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
    [twitter setInitialText:[NSString stringWithFormat: @"%@", message]]; 
    [self presentViewController:twitter animated:YES completion:nil];   
} 
+0

Czy jesteś pewien, że ten kod jest wywoływana z mainThread? Jeśli nie, mogą pojawić się jakieś niejasne rzeczy. Czy masz jakiś kod, który odrzuci VC? –

+0

Tak, to w głównym wątku, próbowałem uruchomić ten kod na głównym kontrolerze NavigationController w aplikacji z tym samym błędem. – SamRowley

+0

więc '[self.navigationController presentViewController: animated: completion:];' nie działa? –

Odpowiedz

1

Dzięki za opublikowanie tego, miałem to samo, ponieważ dodałem do okna okienko CAShapeLayer dla efektu gradientu. Twój post pomógł mi dowiedzieć się, że to był problem.

Wygląda na to, że dzieje się tak dlatego, że dodają warstwę widoku do podwarstwy okna - w indeksie 0 mogę dodać! Jest to sprzeczne z tym, czego można się spodziewać, to znaczy, że dodaliby oni swój widok jako podzbiór do widoku kontrolera przedstawiającego widok.

Po prostu pomyśleli, że ludzie nie dodają warstw do swojego okna i chcą się upewnić, że nie konkurują ze stosem widoków. Dlaczego umieścili go w indeksie 0, może być tylko dlatego, że ktoś ma zwyczaj robienia tego, jak przypuszczam.

Nie jestem pewien, ale zgaduję, że to może mieć miejsce w przypadku dowolnego kontrolera widoku modalnego.

Rozwiązaniem jest dość prosta:

[viewController presentViewController:facebookViewController 
          animated:YES 
          completion:^{ 
    facebookViewController.view.layer.zPosition = 1000; 
}]; 
+0

Dzięki za odpowiedź, cieszę się, że mogłem ci pomóc w drodze, zmieniłem to, więc twoja odpowiedź jest akceptowana, ponieważ jest bardziej szczegółowa niż moja. – SamRowley

0

Po tygodniu łzawienie włosy się znaleźć rozwiązanie tego Znalazłem przestępstwa kod w aplikacji, mały trick zaokrąglić narożniki całej aplikacji, dobrze się wydawać, że rogi są zaokrąglone, dodając obraz tam:

UIImage *bottomOverlayImage = [UIImage imageNamed:@"bottom_overlay.png"]; 
CALayer *bottomOverlay = [CALayer layer]; 
bottomOverlay.frame = CGRectMake(0, self.window.frame.size.height - 9, bottomOverlayImage.size.width, bottomOverlayImage.size.height); 
bottomOverlay.contents = (id)bottomOverlayImage.CGImage; 
bottomOverlay.zPosition = 1; 
[self.window.layer addSublayer:bottomOverlay]; 

Jeśli ktoś może mi powiedzieć, dlaczego ten kod będzie bałagan Widok Twittera, który byłby bardzo przydatny do wykorzystania w przyszłości. Ten kod został umieszczony w delegacie aplikacji i uruchomiony przy pierwszym załadowaniu.

Powiązane problemy