2013-09-24 17 views
6

Sto provando a creare una tastiera personalizzata per un UITextField, lo sfondo di questo inputView dovrebbe essere trasparente, ho impostato il colore di sfondo nel file xib della vista su "clear color". Funziona alla grande su iOS 6 e precedenti .. ma su iOS 7 non funziona Qualche idea su come posso farlo funzionare? Voglio che sia completamente trasparenteUITextView's inputView su iOS 7

risposta

0

Sto inseguendo lo stesso problema, in quanto ho un tastierino numerico che riempie solo la metà sinistra dello schermo in modalità orizzontale (ed è praticamente inutilizzabile su iOS7 dove l'effetto sfocatura copre l'intero larghezza dello schermo). Non ho ben capito come ottenere ciò che voglio (sfondo sfocato solo dietro il mio inputView reale), ma non ho capito come disattivare la sfocatura del tutto:

  1. Definire una sottoclasse personalizzata di UIView e specificare che nel file XI ter
  2. in questa classe di esclusione willMoveToSuperview: come segue

    - (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]; 
        } 
    } 
    

questo sembra avere un impatto sullo sfondo di ciascuna personalizzato inputView ho (ma non la tastiera di sistema) in modo da potrei NE per salvare/ripristinare qualunque sia il normale valore di opacità quando il tuo inputView viene rimosso dalla superview se non lo desideri.

5

Questo imposta l'opacità dello sfondo su zero quando si visualizza la tastiera personalizzata e la si ripristina su 1 quando viene visualizzata la normale tastiera.

+ (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 sta facendo alcune cose sotto il cofano che non sono documentate. Tuttavia, è possibile esaminare la gerarchia delle viste e regolare le viste rilevanti sovrascrivendo -willMoveToSuperview nella vista di input personalizzata. Ad esempio, questo codice renderà lo sfondo trasparente:

- (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; 
      } 
     } 
    } 
}