【问题标题】:Show Master on UISplitViewController by Default默认情况下在 UISplitViewController 上显示 Master
【发布时间】:2020-02-13 17:11:43
【问题描述】:

当我使用 Visual Studio for Mac (v8.4.5) 创建一个新的“Master Detail App”时,UISplitViewController 的默认行为是在 Detail 页面出现时首先显示它iPhone 处于纵向模式。

我宁愿(我想大多数人都愿意)默认显示 Master 页面。在我的例子中,母版页是一个包含联系人列表的表格视图。

此问题类似于:UISplitViewController in portrait on iPhone shows detail VC instead of master 但针对 Xamarin.iOS

与那里建议的解决方案类似,我试图分配一个代表但没有成功:

    public class ContactsSplitViewControllerDelegate : UISplitViewControllerDelegate
    {
        public override bool EventShowViewController(UISplitViewController splitViewController, UIViewController vc, NSObject sender)
        {
            return true;
        }

        public override bool EventShowDetailViewController(UISplitViewController splitViewController, UIViewController vc, NSObject sender)
        {
            return true;
        }
    }

    public partial class ContactsSplitViewController : UISplitViewController
    {
        public ContactsSplitViewController (IntPtr handle) : base (handle)
        {
            this.Delegate = new ContactsSplitViewControllerDelegate();
        }

    }

【问题讨论】:

    标签: xamarin.ios uisplitviewcontroller


    【解决方案1】:

    设置PreferredDisplayMode

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
    
        this.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
    }
    

    【讨论】:

    • 不高兴。仍然给出详细页面。
    【解决方案2】:

    经过一些实验,似乎在代理上覆盖 CollapseSecondViewController 会起作用,尽管我还不确定这是正确的解决方案。

    using Foundation;
    using System;
    using UIKit;
    
    namespace MasterDetailTest
    {
        public class SplitViewControllerDelegate : UISplitViewControllerDelegate
        {
            public override bool CollapseSecondViewController(UISplitViewController splitViewController, UIViewController secondaryViewController, UIViewController primaryViewController)
            {
                return true;
            }
        }
    
        public partial class MainPageSplitViewController : UISplitViewController
        {
            public MainPageSplitViewController (IntPtr handle) : base (handle)
            {
                this.Delegate = new SplitViewControllerDelegate();
            }
    
            public override void ViewDidLoad()
            {
                base.ViewDidLoad();
    
                // When implemented in my project, I found I needed to set this
                // or the delegate would not be called.
                this.SetNeedsFocusUpdate();
            }
    
        }
    }
    

    【讨论】:

    • 感谢分享。不要忘记接受答案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多