Показать мастер на UISplitViewController по умолчанию - PullRequest
0 голосов
/ 13 февраля 2020

Когда я создаю новое приложение «Master Detail App» в Visual Studio для Ma c (v8.4.5), поведение UISplitViewController по умолчанию состоит в том, чтобы сначала отображать страницу Detail , когда она появляется на iPhone в портретном режиме.

Я бы предпочел (как я думаю, большинство людей предпочло бы), чтобы страница Master показывалась по умолчанию. В моем случае главная страница - это табличное представление, содержащее список контактов.

Этот вопрос похож на: UISplitViewController в портретной ориентации на iPhone показывает детализацию V C вместо главной но для 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();
        }

    }

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

После некоторых экспериментов кажется, что переопределение 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();
        }

    }
}
0 голосов
/ 13 февраля 2020

установить PreferredDisplayMode

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

    this.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
}
...