【问题标题】:MonoTouch: how to select initial view from TabBarController's multiple viewsMonoTouch:如何从 TabBarController 的多个视图中选择初始视图
【发布时间】:2010-12-30 18:23:30
【问题描述】:

我有 5 个 TabBar 视图...如何选择应用首次启动时出现的视图? (我使用应用程序启动时为空的数据进行了一些计算)。该应用程序甚至在它到达 FinishedLaunching 之前就崩溃了!它如何确定哪个视图将成为第一个视图?

之前的一个答案我得到了建议 tabBarController.SelectedIndex = 0; (我正在使用 MonoTouch) 但没有告诉我放在哪里。

【问题讨论】:

    标签: view xamarin.ios tabbarcontroller


    【解决方案1】:

    您应该在 UITabBarController 的 ViewDidLoad 中创建视图控制器,而不是在 ViewDidAppear 中。我使用下面的代码(第一部分在您的 AppDelegate 类中):

        // WARNING: Do not make these variables local. MonoTouch will loose the reference to them!
        private UIWindow _mainWindow;
        private MainTabBarController _mainTabBarController;
    
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            _mainWindow = new UIWindow(UIScreen.MainScreen.Bounds);
            _mainTabBarController = new MainTabBarController();
            _mainWindow.AddSubview(_mainTabBarController.View);
            _mainWindow.MakeKeyAndVisible ();
            return true;
        }
    

    您的 MainTabBarController 类应如下所示:

    public class MainTabBarController : UITabBarController
    {
        public override void ViewDidLoad ()
        {
            ViewControllers = new UIViewController[]
            {
                new ViewControllerTab1(),
                new ViewControllerTab2(),
                new ViewControllerTab3(),
                new ViewControllerTab4(),
                new ViewControllerTab5()
            };
            SelectedIndex = 2;
        }
    }
    

    这将在启动时显示 Tab3(索引为 2)。

    ViewControllerTab1 等是派生自例如的类。 UIViewController 或 UINavigationController 在自己的 ViewDidLoad() 中实现其用户界面

    【讨论】:

    • 小提示:你必须在这里调用base.ViewDidLoad,不是吗?
    • 我认为您不必在这里调用 base.ViewDidLoad。 Apple 的 UIViewController 文档没有说明这是必需的。当需要时,Apple 会指定这一点(例如,对于 viewWillAppear:“如果您覆盖此方法,则必须在实现中的某个时刻调用 super”)。但是我刚开始 iPhone 编程,所以我绝对不是这方面的专家。
    【解决方案2】:
    var u = new UIViewController[]
    {
       tab1,
       tab2,
       tab3,
       tab4,
       tab5,
    };
    
    this.ViewControllers = u;
    this.SelectedViewController = tab1;
    

    我通常将 UITabBarController 子类化,并将上面的代码添加到我覆盖的 ViewDidAppear 方法中。

    【讨论】:

    • 谢谢凯文...我会试一试并回复你。我确实有一个问题:这段代码去哪里了?我是 MonoTouch 的新手,所以请多多包涵……如果遇到问题,我相信我会有更多问题。
    • 忽略这个蹩脚的问题:它去哪儿了!
    • 嗯……我用 IB 构建了这个……我猜 tab1、tab2 等是指在 TabBar 本身中显示的名称?它们是字符串,还是?你有工作代码的实际例子吗?
    • 不,tab1-tab5 是 UIViewController,用于管理选项卡所代表的不同视图。结帐MonoTouch.info 并搜索 UITabViewController 以查看一些示例。
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多