答えて

0

は、サンプルimplimentationをテキストボックス

private UIView activeview;    // Controller that activated the keyboard 
private float scroll_amount = 0.0f; // amount to scroll 
private float bottom = 0.0f;   // bottom point 
private float offset = 10.0f;   // extra offset 
private bool moveViewUp = false;   // which direction are we moving 

のviewDidLoadのキーボードオブザーバー()を収容するためのコントローラ

変数を参照してください。

// Keyboard popup 
NSNotificationCenter.DefaultCenter.AddObserver 
(UIKeyboard.DidShowNotification,KeyBoardUpNotification); 

// Keyboard Down 
NSNotificationCenter.DefaultCenter.AddObserver 
(UIKeyboard.WillHideNotification,KeyBoardDownNotification); 

まずはKeyboardUpNotificationメソッドです。基本的には、コントロールがキーボードによって隠されているかどうかを計算し、そうであれば、コントロールを表示するためにビューを移動する必要があるかどうかを計算し、それを移動します。

private void KeyBoardUpNotification(NSNotification notification) 
{ 
    // get the keyboard size 
    RectangleF r = UIKeyboard.BoundsFromNotification (notification); 

    // Find what opened the keyboard 
    foreach (UIView view in this.View.Subviews) { 
     if (view.IsFirstResponder) 
      activeview = view; 
    } 

    // Bottom of the controller = initial position + height + offset  
    bottom = (activeview.Frame.Y + activeview.Frame.Height + offset); 

    // Calculate how far we need to scroll 
    scroll_amount = (r.Height - (View.Frame.Size.Height - bottom)) ; 

    // Perform the scrolling 
    if (scroll_amount > 0) { 
     moveViewUp = true; 
     ScrollTheView (moveViewUp); 
    } else { 
     moveViewUp = false; 
    } 

} 

キーボードダウンイベントは単純です。ビューが移動された場合は、それを逆にします。

private void KeyBoardDownNotification(NSNotification notification) 
{ 
    if(moveViewUp){ScrollTheView(false);} 
} 

ビューをスクロールすると、ビューがアニメーション表示されます。

private void ScrollTheView(bool move) 
{ 

    // scroll the view up or down 
    UIView.BeginAnimations (string.Empty, System.IntPtr.Zero); 
    UIView.SetAnimationDuration (0.3); 

    RectangleF frame = View.Frame; 

    if (move) { 
     frame.Y -= scrollamount; 
    } else { 
     frame.Y += scrollamount; 
     scrollamount = 0; 
    } 

    View.Frame = frame; 
    UIView.CommitAnimations(); 
} 
+0

こんにちは、私はあなたのソリューションを使用して問題に遭遇しました。私の計算されたscroll_amountは常に負である...任意のアイデア私が間違っていること... Thx – Christoph

関連する問題