Monotouch:如何将UIView添加到DialogViewController

时间:2012-10-25 01:29:52

标签: uiview xamarin.ios dialogviewcontroller

在我的一个屏幕中,我需要向DialogViewController添加UIView(带有一些标签和按钮)。原因是我没有使用TableView标头,因为我不想在滚动表时滚动这个视图。

如果我将自定义视图添加到导航栏,我可以实现此目的,但我的视图将不会接收任何触摸(导航控制器会吃掉它们)。

我还尝试向DialogsViewController父控制器添加自定义视图,当它工作时,在LoadView()中调整tableview框架的大小不会做任何事情。

是否有其他方法可以向DialogViewController添加自定义视图?

谢谢。

1 个答案:

答案 0 :(得分:5)

要添加不滚动的标题,您可以创建一个控制器,其视图包含您要添加的其他视图以及DialogViewController的视图。例如,下面的简单示例将UILabel与DialogViewController的视图一起添加为附加控制器的子视图(在本例中称为容器):

   [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        UIWindow window;
        MyDialogViewController dvc;
        UIViewController container;
        float labelHeight = 30;

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            container = new UIViewController ();

            container.View.AddSubview (new UILabel (new RectangleF (0, 0, UIScreen.MainScreen.Bounds.Width, labelHeight)){
                Text = "my label", BackgroundColor = UIColor.Green});

            dvc = new MyDialogViewController (labelHeight);

            container.View.AddSubview (dvc.TableView);

            window.RootViewController = container;

            window.MakeKeyAndVisible ();

            return true;
        }

    }

然后DialogViewController在ViewDidLoad方法中调整TableView的高度:

   public partial class MyDialogViewController : DialogViewController
    {
        float labelHeight;

        public MyDialogViewController (float labelHeight) : base (UITableViewStyle.Grouped, null)
        {
            this.labelHeight = labelHeight;

            Root = new RootElement ("MyDialogViewController") {
                new Section (){
                    new StringElement ("one"),
                    new StringElement ("two"),
                    new StringElement ("three")
                }
            };
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            TableView.Frame = new RectangleF (TableView.Frame.Left, TableView.Frame.Top + labelHeight, TableView.Frame.Width, TableView.Frame.Height - labelHeight);
        }
    }

以下是在模拟器中显示结果的屏幕截图: enter image description here