2013-09-24 56 views
6

Tôi đang cố gắng tạo bàn phím tùy chỉnh cho UITextField, nền của inputView này phải trong suốt, tôi đã đặt màu nền trong tệp xib của chế độ xem thành "màu rõ ràng". Nó hoạt động tốt trên iOS 6 và trước đó .. nhưng trên iOS 7 nó không hoạt động Bất kỳ ý tưởng làm thế nào tôi có thể làm cho nó hoạt động? Tôi muốn nó được hoàn toàn minh bạchChế độ xem đầu vào của UITextView trên iOS 7

Trả lời

0

Tôi đang theo dõi cùng một vấn đề, vì tôi có bàn phím số chỉ lấp đầy nửa bên trái của màn hình ở chế độ nằm ngang (và về cơ bản không sử dụng được trên iOS7, nơi hiệu ứng mờ bao phủ toàn bộ chiều rộng của màn hình). Tôi đã không hoàn toàn tìm ra cách để có được những gì tôi muốn (nền mờ chỉ đằng sau inputView thực tế của tôi), nhưng tôi đã tìm ra cách để vô hiệu hóa hoàn toàn mờ:

  1. Xác định một lớp con tùy chỉnh của UIView và chỉ định trong file xib của bạn
  2. trong này willMoveToSuperview lớp override: như sau

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

này dường như ảnh hưởng đến nền của mỗi tùy chỉnh inputView tôi đã (nhưng không phải là hệ thống bàn phím), do đó bạn có thể ne ed để lưu/khôi phục lại bất cứ giá trị opacity bình thường là khi inputView của bạn bị loại bỏ khỏi superview nếu bạn không muốn điều đó.

5

Điều này sẽ đặt độ mờ phông nền thành 0 khi hiển thị bàn phím tùy chỉnh của bạn và đặt lại thành 1 khi bàn phím thông thường được hiển thị.

+ (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 đang thực hiện một số việc dưới mui xe không được ghi chép. Tuy nhiên, bạn có thể kiểm tra hệ thống phân cấp chế độ xem và điều chỉnh các chế độ xem có liên quan bằng cách ghi đè -willMoveToSuperview trong chế độ xem đầu vào tùy chỉnh của bạn. Ví dụ: mã này sẽ làm cho phông nền trong suốt:

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