2013-09-24 5 views
6

私はUITextField用のカスタムキーボードを作成しようとしています。このinputViewの背景は透明でなければなりません。ビューのxibファイルの背景色を「クリアカラー」に設定しました。 iOS 6以前ではうまくいっていますが、iOS 7ではうまく動作しません。 どのように動作させることができますか?私はそれを完全に透明にしたいですUITextViewのinputView on iOS 7

答えて

0

私は風景モードで画面の左半分だけを塗りつぶすテンキーパッドを持っています(そしてぼかし効果が全体をカバーするiOS7では基本的に使用できません画面の幅)。私はかなり私は(唯一の私の実際の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]; 
        } 
    } 
    

を次のようにこれは私が持っている(ただし、システムキーボード)ので、あなたは、NEかもしれないinputViewすべてのカスタムの背景に影響を与えるように見えますあなたが望んでいない場合、あなたのinputViewがsuperviewから削除されたときの通常の不透明度の値を保存/復元します。

5

これは、カスタムキーボードを表示しているときにバックドロップ不透明度を0に設定し、通常のキーボードが表示されているときに1に戻します。

0

iOS 7は、文書化されていないいくつかのことを行っています。ただし、カスタム入力ビューで-willMoveToSuperviewをオーバーライドすることによって、ビュー階層を調べて関連するビューを調整できます。たとえば、このコードでは背景が透明になります。

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