如何将对话框视图控制器作为子视图添加到 UIView,反之亦然



我已经在网上寻找有关此主题的任何资源一段时间了,但没有提出任何解决我困境的方法。

我有一个对话框视图控制器,它的根只是显示一个字符串列表,类似于 iphone 音乐歌曲可滚动视图的布局方式。我需要的是位于屏幕顶部的子视图和其下方的可滚动DVC。我需要顶部视图始终在视图中,而用户可以滚动根元素,因为顶部视图将保存统计信息。

我尝试添加子视图,但它只是与它下面的 dvc 重叠,并且我无法找到将 dvc 作为子视图添加到 UIView 的方法。

任何帮助将不胜感激。

实现此目的所需的是托管两个子视图控制器的单个根视图控制器。 一个子视图包含窗口顶部的统计信息。 底部子视图包含保存对话框视图的导航控制器。

using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.Dialog;
using System.Drawing;
namespace delete201205203
{
    [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        UIWindow window;
        MyUIViewController _mvc;
        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            window = new UIWindow (UIScreen.MainScreen.Bounds);
            _mvc = new MyUIViewController ();
            window.RootViewController = _mvc;
            window.MakeKeyAndVisible ();
            return true;
        }
    }
    public class MyUIViewController : UIViewController
    {
        MyDialogViewController _dvc;
        UINavigationController _nav;
        StatisticsViewController _statistics;
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            var root = new RootElement ("Root") {
                new Section ("Section") {
                    new EntryElement ("caption", "placeholder", ""),
                    new RootElement ("Root 2") {
                        new Section ("Section") {
                            new EntryElement ("caption", "placeholder", ""),
                            new StringElement ("Back", () => {
                                _nav.PopViewControllerAnimated (true);  
                            })
                        }
                    }
                }
            };
            _dvc = new MyDialogViewController (root);
            _nav = new UINavigationController (_dvc);
            _nav.SetNavigationBarHidden (true, false);
            _nav.View.Frame = new RectangleF (0, 70f,
                                              this.View.Bounds.Width, 
                                              this.View.Bounds.Height -70f);
            _statistics = new StatisticsViewController ();
            _statistics.View.Frame = new RectangleF (0, 0,
                                              this.View.Bounds.Width, 
                                              70f);
            this.AddChildViewController (_nav);
            this.View.AddSubview (_nav.View);
            this.AddChildViewController (_statistics);
            this.View.AddSubview (_statistics.View);
        }
        public override void ViewWillLayoutSubviews ()
        {
            base.ViewWillLayoutSubviews ();
            _nav.View.Frame = new RectangleF (0, 70f,
                                              this.View.Bounds.Width, 
                                              this.View.Bounds.Height -70f);
            _statistics.View.Frame = new RectangleF (0, 0,
                                              this.View.Bounds.Width, 
                                              70f);
        }
        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            return true;
        }
    }
    public class StatisticsViewController : UIViewController
    {
        UILabel _label;
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            this.View.BackgroundColor = UIColor.White;
            _label = new UILabel (new RectangleF (this.View.Bounds.Width * .5f - 50f,
                                                  this.View.Bounds.Height * .5f -10f,
                                                  100f, 20f));
            _label.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;
            _label.Text = "statistics";
            this.View.AddSubview (_label);
        }
        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            return true;
        }
    }
    // This overrde is needed to ensure the pop view animation  
    // works correctly in landscape mode
    public class MyDialogViewController : DialogViewController
    {
        public MyDialogViewController (RootElement root) : base (root) {}
        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            return true;
        }   
    }
}

最新更新