2013-09-24 15 views
6

मैं UITextField के लिए एक कस्टम कीबोर्ड बनाने की कोशिश कर रहा हूं, इस इनपुट की पृष्ठभूमि पारदर्शी होना चाहिए, मैंने दृश्य की xib फ़ाइल में पृष्ठभूमि रंग को "साफ़ रंग" में सेट किया है। यह आईओएस 6 और इससे पहले बहुत अच्छा काम कर रहा है .. लेकिन आईओएस 7 पर यह काम नहीं कर रहा है कोई विचार मैं इसे कैसे काम कर सकता हूं? मैं इसे पूरी तरह से पारदर्शी होना चाहता हूंआईआईटी पर UITextView का इनपुट दृश्य 7

उत्तर

0

मैं एक ही समस्या का पीछा कर रहा हूं, क्योंकि मेरे पास एक संख्यात्मक कीपैड है जो लैंडस्केप मोड में स्क्रीन के केवल बाएं आधे भाग को भरता है (और मूल रूप से आईओएस 7 पर अनुपयोगी है जहां धुंध प्रभाव पूरे कवर करता है स्क्रीन की चौड़ाई)। मैं काफी पता लगा नहीं किया है जो मैं चाहता (केवल मेरे वास्तविक inputView पीछे धुंधला पृष्ठभूमि) प्राप्त करने के लिए, लेकिन मैं कलंक पूरी तरह से निष्क्रिय करने के लिए कैसे पता लगा है:

  1. UIView के एक कस्टम उपवर्ग परिभाषित करें और है कि निर्दिष्ट अपने xib फ़ाइल
  2. इस वर्ग ओवरराइड willMoveToSuperview में: इस प्रकार

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

यह हर कस्टम की पृष्ठभूमि को प्रभावित करने के inputView मैं है (लेकिन प्रणाली कुंजीपटल) ताकि आप ne सकता है प्रकट होता है सामान्य ओपेसिटी मान को सहेजने/पुनर्स्थापित करने के लिए एड करें जब आपका इनपुट दृश्य पर्यवेक्षण से हटा दिया जाता है यदि आप इसे नहीं चाहते हैं।

5

यह आपके कस्टम कीबोर्ड को प्रदर्शित करते समय बैकड्रॉप अस्पष्टता शून्य पर सेट करेगा और सामान्य कीबोर्ड दिखाए जाने पर इसे 1 पर रीसेट कर देगा।

+ (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

आईओएस 7 कुछ ऐसी चीजें कर रहा है जो दस्तावेज नहीं हैं। हालांकि, आप दृश्य पदानुक्रम की जांच कर सकते हैं और अपने कस्टम इनपुट दृश्य में ओवरराइडिंग -विल्लमोवट्ससुपरिव द्वारा प्रासंगिक दृश्यों को समायोजित कर सकते हैं। उदाहरण के लिए, यह कोड बैकड्रॉप पारदर्शी बना देगा:

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