2017-02-09 26 views
5

Po długim wyszukiwaniu przez Google i SO nie znalazłem podobnego problemu. Niektóre zbliżyły się, ale nie tak jak moje.Pasek narzędzi animuje się podczas wielozadaniowości

Problem pod ręką: W mojej aplikacji (na podstawie WKWebView), jeśli klawiatura jest wyświetlana, a ja dwukrotnie dotknij strony domowej i przełącz się do innej aplikacji, która wyświetla klawiaturę, moja klawiatura aplikacji jest ukryta. To nie problem. Kiedy ponownie wykonuję wiele zadań, w migawce zajmuje mojej aplikacji, klawiatura zniknęła, ale niestandardowy pasek narzędzi, który mam powyżej, wydawał się pozostać na miejscu bez klawiatury poniżej. Stukam w moją aplikację, a ona animuje się, a następnie z powrotem na dół ekranu.

Co próbowałem: Wiem o [self.view endEditing: TAK], rezygnując z programu FirtstResponder i wszystkimi metodami zamykania klawiatury. Próbowałem umieszczać i mieszać za pomocą viewWillDisappear, applicationWillResignActive i applicationDidEnterBackground. Żadne z nich nie poradzi sobie z moim problemem paska narzędzi.

W ten sposób animuję klawiaturę na ekranie i poza nim, jednocześnie zachowując widoczność paska narzędzi.

- (void)keyboardWillShow:(NSNotification*)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.intValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil]; 
} 

- (void)keyboardWillHide:(NSNotification*)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.intValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil]; 
} 

Czy ktoś ma pojęcia lub myśli?

Znowu moja aplikacja jest oparta na WKWebView, więc bezpośrednie wywoływanie lub kierowanie w kierunku widoków tekstu, próba skupienia się w widoku jest bezcelowa.

Jeśli ktoś potrzebuje więcej kodu, daj mi znać. Każda pomoc będzie doceniona. Dziękuję Ci.

AKTUALIZACJA 1/20/18

Więc tutaj jest o kod wskazówki, gdzie i jak mój pasek narzędzi zostanie zainicjowany i załadowany.

h.

UIToolbar *toolBar; 
@property (nonatomic, strong) UIToolbar *toolBar; 

m.

@synthesize toolBar; 

- (void)viewDidLoad { 
    //Toolbar setup 
    CGRect toolFrame, remain; 
    CGRectDivide(self.view.bounds, &toolFrame, &remain, 48, CGRectMaxYEdge); 
    self.toolBar = [[UIToolbar alloc] initWithFrame:toolFrame]; 
    [self.toolBar setBarStyle:UIBarStyleBlackTranslucent]; 
    [self.toolBar setClipsToBounds:YES]; 
    [self.toolBar setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 
    [self.view addSubview:self.toolBar]; 
} 

To o niej, inne niż niektóre kod nazywając ją odświeżyć po przełączeniu przycisków, nic innego nie jest przywiązany do tego paska.

Nie zostanie wywołany, dopóki nie dotknę przełącznika lub nie trzeba go odświeżać, gdy użytkownik zmieni tło, Zajmuje się NSUserDefaults w innym widoku.

-(void)viewWillLayoutSubviews{ 
    [self.currentScrollView layoutIfNeeded]; 
    [self.toolBar layoutIfNeeded]; 
    [self.view layoutSubviews]; 
} 
+0

To wciąż trwający problem z moją aplikacją. – ChrisOSX

+0

Skąd utworzyłeś pasek narzędzi i jak? – ChikabuZ

+0

Został utworzony w moim głównym widoku (viewDidLoad) po załadowaniu aplikacji. Stworzyłem go w pliku h z właściwością, a następnie zsyntetyzowałem w pliku m i dodałem go do subView. – ChrisOSX

Odpowiedz

0

Tak więc poniżej jest to, co działa dla mnie.

W moim AppDelegate.m ja po prostu umieścić endEditing:

- (void)applicationWillResignActive:(UIApplication *)application { 
    [self.window endEditing:YES]; 
} 

Teraz w moim zgłoszeniu keyboardWillShow:

- (void)keyboardWillShow:(NSNotification*)notification 
{ 
    /////New added method////// 
    if([UIApplication sharedApplication].applicationState != UIApplicationStateActive){ 
     return; 
    } 


    NSDictionary* info = [notification userInfo]; 
    NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey]; 
    NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey]; 
    NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey]; 

    [UIView animateWithDuration:durationValue.doubleValue 
          delay:0 
         options:(curveValue.integerValue << 16) 
        animations:^{ 
         self.toolBar.frame = CGRectMake(0, 
                 [endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44, 
                 self.toolBar.bounds.size.width, 
                 self.toolBar.bounds.size.height); 
        } 
        completion:nil];  
} 

To było to coś tak proste po wszystkim. Po prostu ukryłem klawiaturę, tak jak poprzednio, i sprawdzałem, czy aplikacja jest aktywna.

Teraz, gdy dwukrotnie dotknęłam ekranu domowego, klawiatura się chowa. Jeśli przejdę do innej aplikacji, takiej jak Wiadomości, narysuj klawiaturę, kliknij dwukrotnie i wróć do mojej aplikacji, klawiatura nigdy się nie ruszy.Rozwiązywanie mojego problemu.

Powiązane problemy