【问题标题】:Hide/Remove a child view in Xamarin Studio在 Xamarin Studio 中隐藏/删除子视图
【发布时间】:2013-07-28 08:45:39
【问题描述】:

我通过 AddChildViewController 方法向视图添加了一个 UITabBarController。然后我导航到下一个视图,我的标签栏出现了,嘿。由于我现在在一个新视图中,如何删除子视图的 UITabBarController,因为当我使用 RemoveFromSuperview 函数时,它只会删除父视图,如果我推送另一个视图,栏仍然会出现。

查看添加子视图的位置:

tabController = new UITabBarController ();

tabController.ViewControllers = new UIViewController[] {
    vc1,
    vc2,
    vc3
};
tabController.ViewControllers [0].TabBarItem.Title = "vc1";
tabController.ViewControllers [1].TabBarItem.Title = "vc2";
tabController.ViewControllers [2].TabBarItem.Title = "vc3";

this.NavigationController.AddChildViewController(tabController);
this.NavigationController.Add(tabController.View);

非常感谢!

编辑 - 更多关于我的问题的详细信息:http://forums.xamarin.com/discussion/6473/hide-tabbarcontroller-when-added-as-a-child-view#latest

【问题讨论】:

    标签: c# xamarin


    【解决方案1】:

    如果我理解正确,您希望您的初始 ViewController 成为 TabViewController,并且当用户在其中一个 ViewController 中选择某些内容时,它会转换为底部没有 TabView 按钮的 ViewController。

    如果是这样,这就是你需要做的。

    在 AppDelegate.cs 中,您需要像这样设置窗口/视图控制器:

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        window = new UIWindow (UIScreen.MainScreen.Bounds);
        rootController = new UINavigationController ();
        window.RootViewController = rootController;
    
        var tabController = new UITabBarController ();
    
        var vc1 = new TestController1();
        var vc2 = new TestController2();
        var vc3 = new TestController3();
    
        tabController.ViewControllers = new UIViewController[] {
            vc1,
            vc2,
            vc3
        };
    
        tabController.ViewControllers [0].TabBarItem.Title = "vc1";
        tabController.ViewControllers [1].TabBarItem.Title = "vc2";
        tabController.ViewControllers [2].TabBarItem.Title = "vc3";
    
        this.rootController.PushViewController(tabController, false);
    
        window.MakeKeyAndVisible ();
    
        return true;
    }
    

    完成此设置后,您可以从 TestController1 的类中转换到类似这样的新视图:

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
    
        var button = UIButton.FromType(UIButtonType.RoundedRect);
        button.Frame = new RectangleF (10, 10, 200, 30);
        button.SetTitle ("Go Child Controller", UIControlState.Normal);
    
        button.TouchUpInside += (object sender, EventArgs e) => {
            NavigationController.PushViewController(new TestController4(), true);
        };
    
        View.AddSubview (button);
     }
    

    此外,您还可以简化标签按钮标题的设置。

    不要这样做:

    tabController.ViewControllers [0].TabBarItem.Title = "vc1";
    

    你可以在你的子 UIViewController 中设置标题:

    public class TestController1:UIViewController
    {
        public TestController1 ()
        {
            this.Title = "vc1";
        }
    
       ...
    

    【讨论】:

    • 感谢您的回复,应用启动时使用 Finished Launching 方法,直到应用中的第三个屏幕才使用我的选项卡视图(假设登录、密码和带有选项卡的摘要屏幕看法)。是否仍然可以从应用程序的第三个视图中调用选项卡式视图?我希望在用户注销时隐藏选项卡视图控制器。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2014-06-30
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多