2013-09-24 19 views
6

Próbuję utworzyć niestandardową klawiaturę dla UITextField, tło tego inputView powinno być przezroczyste, ustawiłem kolor tła w pliku Xib widoku na "clear color". Działa świetnie na iOS 6 i wcześniej .. ale na iOS 7 nie działa Każdy pomysł, jak mogę to sprawić? Chcę, aby był w pełni przezroczysty.Wejście UITextViewView na iOS 7

Odpowiedz

0

Grywam ten sam problem, ponieważ mam klawiaturę numeryczną, która wypełnia tylko lewą połowę ekranu w trybie poziomym (i jest zasadniczo bezużyteczna na iOS7, gdzie efekt rozmycia pokrywa całe szerokość ekranu). I nie dość zorientowali się, jak dostać to, co chcę (niewyraźne tło tylko za moją rzeczywistą inputView), ale zorientowali się, jak wyłączyć rozmycie całkowicie:

  1. zdefiniować niestandardowy podklasy UIView i określić, że w pliku XIB
  2. w tej klasie override willMoveToSuperview następująco:

    - (void)willMoveToSuperview:(UIView *)newSuperview 
    { 
        if (UIDevice.currentDevice.systemVersion.floatValue >= 7 && 
         newSuperview != nil) 
        { 
         CALayer *layer = newSuperview.layer; 
         NSArray *subls = layer.sublayers; 
         CALayer *blurLayer = [subls objectAtIndex:0]; 
         [blurLayer setOpacity:0]; 
        } 
    } 
    

To wydaje się wpływać na tle każdej zwyczaju inputView mam (ale nie klawiatura System), dzięki czemu może ne ed, aby zapisać/przywrócić dowolną normalną wartość krycia, gdy twój inputView zostanie usunięty z podglądu, jeśli tego nie chcesz.

5

Spowoduje to ustawienie nieprzezroczystości tła na zero podczas wyświetlania niestandardowej klawiatury i przywrócenie go do wartości 1 po wyświetleniu normalnej klawiatury.

+ (void)updateKeyboardBackground { 
    UIView *peripheralHostView = [[[[[UIApplication sharedApplication] windows] lastObject] subviews] lastObject]; 

    UIView *backdropView; 
    CustomKeyboard *customKeyboard; 

    if ([peripheralHostView isKindOfClass:NSClassFromString(@"UIPeripheralHostView")]) { 
     for (UIView *view in [peripheralHostView subviews]) { 
      if ([view isKindOfClass:[CustomKeyboard class]]) { 
       customKeyboard = (CustomKeyboard *)view; 
      } else if ([view isKindOfClass:NSClassFromString(@"UIKBInputBackdropView")]) { 
       backdropView = view; 
      } 
     } 
    } 

    if (customKeyboard && backdropView) { 
     [[backdropView layer] setOpacity:0]; 
    } else if (backdropView) { 
     [[backdropView layer] setOpacity:1]; 
    } 
} 

+ (void)keyboardWillShow { 
    [self performSelector:@selector(updateKeyboardBackground) withObject:nil afterDelay:0]; 
} 

+ (void)load { 
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; 
} 
0

iOS 7 robi pewne rzeczy pod maską, które nie są udokumentowane. Można jednak sprawdzić hierarchię widoków i dostosować odpowiednie widoki, przesłoniwszy opcję -willMoveToSuperview w niestandardowym widoku wejściowym. Na przykład ten kod sprawi, że tło stanie się przezroczyste:

- (void)willMoveToSuperview:(UIView *)newSuperview { 

    NSLog(@"will move to superview of class: %@ with sibling views: %@", [newSuperview class], newSuperview.subviews); 

    if ([newSuperview isKindOfClass:NSClassFromString(@"UIPeripheralHostView")]) { 

     UIView* aSiblingView; 
     for (aSiblingView in newSuperview.subviews) { 
      if ([aSiblingView isKindOfClass:NSClassFromString(@"UIKBInputBackdropView")]) { 
       aSiblingView.alpha = 0.0; 
      } 
     } 
    } 
}