2013-09-24 4 views
6

J'essaie de créer un clavier personnalisé pour un UITextField, l'arrière-plan de cette inputView doit être transparent, j'ai défini la couleur d'arrière-plan dans le fichier xib de la vue sur "clear color". Il fonctionne très bien sur iOS 6 et plus tôt .. mais sur iOS 7 cela ne fonctionne pas Toute idée comment puis-je le faire fonctionner? Je veux qu'il soit entièrement transparentUITextView inputView sur iOS 7

Répondre

0

Je suis à la recherche du même problème, car j'ai un pavé numérique qui ne remplit que la moitié gauche de l'écran en mode paysage (et est fondamentalement inutilisable sur iOS7 où l'effet de flou couvre l'ensemble largeur de l'écran). Je n'ai pas tout à fait compris comment obtenir ce que je veux (arrière-plan flou que derrière mon inputView réelle), mais je l'ai compris comment désactiver le flou entièrement:

  1. Définir une sous-classe personnalisée de UIView et préciser que dans votre fichier xib
  2. dans cette dérogation classe willMoveToSuperview: comme suit

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

cela semble un impact sur l'arrière-plan de toutes les coutumes inputView je (mais pas le clavier du système) alors vous pourriez nè ed pour enregistrer/restaurer quelle que soit la valeur d'opacité normale lorsque votre inputView est supprimée de la vue d'ensemble si vous ne le souhaitez pas.

5

Ceci permet de définir l'opacité des fonds à zéro lors de l'affichage de votre clavier personnalisé et de le réinitialiser à 1 lorsque le clavier normal est affiché.

+ (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 fait certaines choses sous le capot qui ne sont pas documentées. Toutefois, vous pouvez examiner la hiérarchie des vues et ajuster les vues correspondantes en redéfinissant -willMoveToSuperview dans votre vue d'entrée personnalisée. Par exemple, ce code rendra la toile de fond transparente:

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