Замена контроллера RootView в приложении Xamarin IOS - PullRequest
0 голосов
/ 13 марта 2020

Мой проект Xamarin IOS использует раскадровку. Это приложение tabbarcontroller, я хотел бы изменить количество вкладок в моем root UITabBarController.

Вы не можете добавлять или удалять вкладки, если создаете tabbarcontroller из раскадровки. Я хотел бы заменить контроллер вида root на контроллер, созданный не из раскадровки. Я все еще хотел бы, чтобы раскадровка для некоторых других моих классов.

Инструкции по созданию пустого проекта Xamarin или удалению раскадровки из проекта Xamarin с использованием Visual Studio на Ma c не работают.

Я думаю, что новый SceneDelegate удаляет возможность установить root контроллер представления в AppDelegate.

Спасибо, Джерри

1 Ответ

0 голосов
/ 13 марта 2020

На самом деле вам не нужно удалять Storyboard. Если вы хотите установить RootViewController в AppDelegate, проверьте следующий код.

в Appdelegate

, следующий код будет работать до iOS 13.0

public bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
   // Override point for customization after application launch.
   // If not required for your application you can safely delete this method

   this.Window = new UIWindow(UIScreen.MainScreen.Bounds);
   var MainViewController = new MyViewController();
   this.Window.RootViewController = MainViewController;
   this.Window.MakeKeyAndVisible();

   return true;
}

И после iOS 13.0 мы должны вызвать подобный код в SceneDelegate, поэтому добавьте следующий код в SceneDelegate одновременно.

public void WillConnect (UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions)
{
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.

    this.Window = new UIWindow(new UIWindowScene(session,connectionOptions));
    var MainViewController = new MyViewController();
    this.Window.RootViewController = MainViewController;
    this.Window.MakeKeyAndVisible();

    // This delegate does not imply the connecting scene or session are new (see  UIApplicationDelegate `GetConfiguration` instead).
}

Кроме того, если вы хотите изменить RootViewController при запуске время (например, при нажатии кнопки).

Мы использовали анимацию, чтобы сделать процесс плавным

var MainController = new UITabBarController();
CATransition transition = CATransition.CreateAnimation();
transition.Duration = 0.3;
transition.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut);

UIApplication.SharedApplication.KeyWindow.RootViewController = MainController;
UIApplication.SharedApplication.KeyWindow.Layer.AddAnimation(transition, "Animation");
...