2017-04-02 14 views
-1

そのiOSのモバイル開発では非常に一般的な問題と、あなたのUIで行われており、それはあまりにも多くのUITextFieldsが含まれていながら、つまり、あなたがUITextFieldsで入力値にしようとするものは、画面の中央下に追加されます。これらのフィールドはキーボードの後ろに隠れています。この一般的な問題をどうやって取り除くことができますか?Xamarin iOSで入力中にUITextFieldの位置を処理する方法は?

+0

男を持っている場合

あなたはベースコントローラベースに以下のメソッドを追加することができ、それを投票なぜあなたを言及してください。ありがとうございました。 – RIYAZ

答えて

-1

私はこの問題を取り除くためにnugetパッケージを使用していました。私はこれらのメソッドの中で2つのメソッドをオーバーライドし、コードを初期化しました。

ダウンロードKeyboardHandlerと、次のように使用します。

using KeyboardHandler; 


public override void ViewWillAppear(bool animated) 
{ 
    base.ViewWillAppear(animated); 
    this.yourScrollView.SubscribeKeyboardManaqger(); 
} 

public override void ViewWillDisappear(bool animated) 
{ 
    base.ViewWillDisappear(animated); 
    this.yourScrollView.UnsubscribeKeyboardManaqger(); 
} 

enter image description here

1

をあなたはキーボードが見えると隠されているときのためにNSNotificationCenterにAddObserverメソッドを使用することができます。

サンプルコード(FYI:いつか昨年別のポストから以下のコードを手に入れた、私はポストへのリンクを思い出すことができないが、それは正常に動作します)

コールAddObserverをあなたのviewDidLoadメソッドで

//キーボードポップアップNSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidShowNotification、KeyBoardUpNotification);

//キーボードダウンNSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillHideNotification、KeyBoardDownNotification)。私は改善し、その上で動作できるように、1

public void KeyBoardUpNotification(NSNotification notification) { 
      CGRect keyboardSize = UIKeyboard.BoundsFromNotification(notification); 

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

      bottom = (activeview.Frame.Y + activeview.Frame.Height + offset); 
      scrollamount = (keyboardSize.Height - (View.Frame.Size.Height - bottom)); 

      if (scrollamount > 0) { 
       moveViewUp = true; 
       MoveView(moveViewUp); 
      } else { 
       moveViewUp = false; 
      } 

     } 

    public void KeyBoardDownNotification(NSNotification notification) { 
       if (moveViewUp) { 
        MoveView(false); 
       } 
      } 

private void MoveView(bool move) { 
      UIView.BeginAnimations(string.Empty, IntPtr.Zero); 
      UIView.SetAnimationDuration(0.3); 
      CGRect frame = View.Frame; 

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

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

ありがとう@megaKertz。なぜ私はそれを使うべきですか?私は2行のコードでそれを行うことができます! FYIこれはアイドルアプローチではなく、入力中に予期せぬリークや結果が発生します。 – RIYAZ

+0

@RIYAZあなたはそれを使うべきだと言ったことはありません。だから、あなたが使用したコードの2行は何ですか – megaKertz

+0

申し訳ありませんが、私はそれを意味しませんでした。私はそれを使用し、このコードで多くの問題を発見した、ScrollViewは奇妙な振る舞いだったので、これを削除した。 – RIYAZ

関連する問題