2012-04-27 8 views
1

キーボードで表示されたビューを開いていますが、バックボタンをクリックするとビューが右からスライドし、ビューが消えたときだけキーボードがスライドします。 viewwilldisappearでresignFirstResponderを呼び出すと、ビューが同時にスライドしながらキーボードが右にスライドします。 ビューでキーボードをスライドさせることはできますか?IPhones - キーボードをビューでスライドさせる

答えて

0

resignFirstresponderviewDidDisappearの方法で貼り付けてください。

+0

動作しません。 – gage

+0

ここではresignfirstresponderを呼び出し、ビューが消えたときにビューのスライドアウトとキーボードのスライドアウトを行います。決してresignfirstresponderを呼び出さないでください。 – gage

0
  **Set notificatins and use these methods.....Hope it solve problem: 

      First of all set your whole view in scrollView** 
      -(void)keyboardDidHide:(NSNotification *)notif 
    { 
      NSTimeInterval duration = 0.4; 
      [UIView animateWithDuration:duration animations: 
       ^{ 
       scrollView.contentSize=CGSizeMake(320,scrollOriginalFrame.size.height); 
       }]; 
       keyboardVisible=NO; 
    } 
    -(void)keyboardDidShow:(NSNotification *)notif 
    { 

     scrollView.contentSize=CGSizeMake(self.view.frame.size.width, scrollOriginalFrame.size.height+235); 
     NSTimeInterval duration = 0.4; 

     [UIView animateWithDuration:duration animations: 
      ^{ 
      [scrollView setContentOffset:CGPointMake(0,162) animated:YES]; 

     }]; 
      keyboardVisible=YES; 
      } 
       **In viewDidLoad() add this** 

     //keyboard 
     scrollOriginalFrame=self.view.frame; 
      scrollOriginalFrame.size.height-=103; 
     scrollView.contentSize=scrollOriginalFrame.size; 
      [[NSNotificationCenter defaultCenter] addObserver:self     selector:@selector(keyboardDidShow:) name:UIKeyboardWillShowNotification object:nil]; 
       [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardWillHideNotification object:nil]; 
keyboardVisible=NO; 
+0

私たちはスクロールビューを持っていないようです。キーボードのスライドが始まると、keyboardDidHideが呼び出され、その時点で既にビューは消えています。 – gage

+0

スクロールビューで表示し、スクロールビューを移動します。実際の表示ではありません –

1

あなたが欲しいものを行うための標準的な方法はありませんが、...
基本的には、キーボードが他のすべてのウィンドウの上にそれ自身のUIWindowに提示だけでビューが、あります。
理論的には、キーボードビューを見つけて希望の方向に移動するだけです。私はあなたがtransformプロパティを使用し、frameを台無しにしないと思う。

Class keyboardClass = NSClassFromString(@"UIPeripheralHostView"); 
for (UIWindow *window in [[UIApplication sharedApplication] windows]) { 
    for (UIView *subview in window.subviews) { 
     if ([subview isKindOfClass:keyboardClass]) { 
      // that's keyboard 
     } 
    } 
} 

は編集:あなたはUINavigationControllerの話をしている場合は
をし、それがプッシュ/ポップ時にデフォルトスライドアニメーションです、そして、あなたは自分のテキストビューにviewWillAppearviewDidDisappearresignFirstResponderbecomeFirstResponderを起動する必要があります。そうすれば、あなたのキーボードはあなたの視界に沿ってスライドします。

+0

これは動作しますが、まだ他の質問があります。キーボードは右スライドではなく、右下隅です。もう一度ビューに入ると、キーボードがスライドできます。 – gage

+0

キーボードは、標準的なキーボード消滅プロセスの一部としてスライドします。私はあなたのviewWillDissapearメソッドでresignFirstResponderを呼び出すと思います。おそらく、キーボードの通知を観察し、元のアニメーション '[view.layer removeAllAnimations]'をキャンセルして自分のアニメーションを実行する必要があります。 –

+0

removeallanimationsは、キーボードのスライドが下がるのを防ぐことはできません。システムはkeyboarddidhiddenの後でキーボードアニメーションの計算を実行しているようです。 – gage

1

私はこれをテストして、iOS 5.1で動作しますが、これは推奨動作ではないと思います。

for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) 
    if ([[keyboardWindow description] hasPrefix:@"<UITextEffectsWindow"]) { 
     NSLog(@"%@", [keyboardWindow description]); 
     [UIWindow beginAnimations:@"fadeKeyboard" context:nil]; 
     keyboardWindow.frame = CGRectMake(keyboardWindow.frame.origin.x + keyboardWindow.frame.size.width, keyboardWindow.frame.origin.y, keyboardWindow.frame.size.width, keyboardWindow.frame.size.height); 
     [UIWindow commitAnimations]; 
    } 

また、キーボードが非表示、または単に手動で上記のコードを使用しようとしているときを検出するために通知UIKeyboardWillHideNotificationを使用することができます。

関連する問題