2013-09-24 40 views
6

Bir UITextField için özel bir klavye oluşturmaya çalışıyorum, bu girişin arka planıGörünüm şeffaf olmalı, "rengi temizle" için arka plan rengini görünümün xib dosyasına ayarladım. IOS 6 ve daha önceki sürümlerde harika çalışıyor ... ama iOS 7'de çalışmıyor Herhangi bir fikri nasıl çalıştırabilirim? Tam olarak şeffaf olmasını istiyorumUITextView Kullanıcı girişi iOS 7 üzerinde görüntüleme

cevap

0

Ekranın sol yarısını yatay modda dolduran sayısal bir tuş takımına sahip olduğumdan ve aynı zamanda bulanıklık etkisinin tümünü kapsadığı iOS7'de kullanılamayan bir sayısal tuş takımım var. ekranın genişliği). Oldukça ben (sadece benim gerçek inputView arkasında bulanık bir arka plan) istediklerini elde etmek nasıl çözemedim ama tamamen bulanıklığı devre dışı bırakmak için nasıl anladım var:

  1. UIView özel bir alt sınıfını tanımlamak ve belirtmek senin xib dosyasında bu sınıf geçersiz kılma willMoveToSuperview olarak
  2. yılında şu şekildedir:

    - (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]; 
        } 
    } 
    
  3. Bu benim (ancak sistem klavyesi) böylece NE olabilir gelmiş inputView her özel arka planını doğrudan etki ettiği görülmektedir

Bunu yapmak istemiyorsanız, normal opaklık değeri ne olursa olsun girişView'iniz süper görünümden kaldırıldığında ne olur?

5

Bu, özel klavyenizi görüntülerken arka plan opaklığını sıfıra ayarlayacak ve normal klavye gösterildiğinde 1'e geri sıfırlayacaktır.

+ (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, kapağın altında belgelenmeyen bazı şeyler yapıyor. Bununla birlikte, görünüm hiyerarşisini inceleyebilir ve özel giriş görünümünüzde -willMoveToSuperview öğesini geçersiz kılarak ilgili görünümleri ayarlayabilirsiniz. Örneğin, bu kod arka planı şeffaf hale getirecektir:

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