3

我做了与这个问题非常相似的事情。我创建了一个 MonoTouch DialogViewController,其中有一堆 EntryElements,用于捕获用户注册的信息。然后我将此 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。我已经向下滚动到底部 - 姓氏上方有更多的 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 回答