更改 RootView 控制器 Xamarin IOS 应用程序

Posted

技术标签:

【中文标题】更改 RootView 控制器 Xamarin IOS 应用程序【英文标题】:Changing RootView controller Xamarin IOS app 【发布时间】:2020-06-25 00:11:48 【问题描述】:

我的 Xamarin ios 项目使用 Storyboard。它是一个 tabbarcontroller 应用程序,我想修改我的根 UITabBarController 中的选项卡数。

如果从 Storyboard 中创建 tabbarcontroller,则无法添加或删除选项卡。我想用不是从情节提要创建的根视图控制器替换根视图控制器。我仍然喜欢我的其他一些课程的故事板。

在 Mac 上使用 Visual Studio 创建空 Xamarin 项目或从 Xamarin 项目中删除情节提要的说明不起作用。

我认为新的 SceneDelegate 移除了在 AppDelegate 中设置根视图控制器的功能。

谢谢, 格里

【问题讨论】:

【参考方案1】:

其实你不需要删除Storyboard。如果要在 AppDelegate 中设置RootViewController,请查看以下代码。

在 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");

【讨论】:

谢谢。那行得通。我知道 AppDelegate 修改,我知道是 SceneDelegate 搞砸了,但我找不到让它工作的咒语。现在代码显然是多余的 - 但可以正常工作。 现在我注意到在 SceneDelegate 中更改 rootViewController 后,我的应用程序禁用了文本输入。我错过了什么?谢谢。 您可以创建一个包含更多详细信息的新主题,以便人们可以更好地帮助您。 ***.com/questions/60677120/… 你可以分享你的样品,这样我就可以在我身边测试它

以上是关于更改 RootView 控制器 Xamarin IOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin for iOS 中呈现具有不同导航的 viewController

SplitViewController - 可以更改 rootview 和 detailview 的 z 顺序吗?

iPhone - 在导航控制器中替换 rootview

将场景中的 rootview 更改为视图控制器?

poptorootviewcontroller不依次调用rootview控制器的dealloc方法和viewdidappear方法

更改 rootViewController 与当前 ModalViewController