3

私はこの質問と非常によく似たことをしました。ユーザー登録の情報を取得するために使用される一連の EntryElements を持つ MonoTouch DialogViewController を作成しました。次に、この DialogViewController を別の UIViewController に追加します。

            registerDialog = new RegisterDialog (); // the dvc
            registerDialog.View.Frame = new RectangleF (0, 60, 320, View.Frame.Height - 60);
            registerDialog.TableView.BackgroundView = null; // make the background transparent
            Add (registerDialog.View);

問題は、ユーザーが EntryElement をクリックしたときに発生します。キーボードが表示され、最初のいくつかの EntryElements については、キーボードが何も隠していないため、すべて問題ありません。EntryElements を進めていくと、DialogViewController はキーボードの上の要素をスクロールしなくなります。基本的に、DialogViewController のスクロールが壊れます。

これは、DialogViewController のビューを別のビューに追加することによって発生します。通常、DialogViewController を UINavigationController にプッシュすると、完全に機能します。

NavigationController.PushViewController (new LoginScreen (), true);

これはバグですか、それともスクロールを修正するためにオーバーライドできるものはありますか?

編集

スクリーンショット 1: いくつかの EntryElements を含む DialogViewController。一番下までスクロールしました。Last Name の上にさらに EntryElements があります。

ここに画像の説明を入力

スクリーンショット 2: Email EntryElement をタップするとどうなるか。DVC がテーブル ビューを上にスクロールしていないことがはっきりとわかりますが、通常はスクロールします。

ここに画像の説明を入力

4

1 に答える 1

0

DialogViewController ビューを別のビューに追加する代わりに、DialogViewController クラスのサブクラス化を試みることができます。そのようにすれば問題はなくなります。これが良い方法かどうかはわかりませんが、本番環境でうまく使用しています。これが私が通常行う方法です。基本コンストラクターで RootElement が最初は空であることに注意してください。ただし、ViewDidLoad にコンテンツを追加します。

public class MyController : DialogViewController
{
    public MyController() : base(new RootElement(""), true)
    {
    }

    public override void ViewDidLoad() 
    {
        var section1 = new Section("Credentials") 
        {
            new EntryElement("Username", null, null),
            new EntryElement("Password", null, null)
        };

        Root.Add(section1);
       // additional initialization here
    }
}

また、フォームの上または下に何かを追加する場合は、ヘッダーとフッターをセクションに追加できます (Section クラスの HeaderView プロパティと FooterView プロパティ)。

于 2013-05-15T16:18:40.860 に答える