【问题标题】:Xamarin.iOS - Unable to load view controller from within another view controllerXamarin.iOS - 无法从另一个视图控制器中加载视图控制器
【发布时间】:2020-02-01 00:26:28
【问题描述】:

我最近开始使用 Xamarin 进行开发,所以我绝不是专家,并且已经在这个问题上停留了一天左右。

首先,我没有使用故事板。我正在创建自己的自定义视图 (xib) 并从代码中加载它们

我正在构建一个新的 Xamarin.iOS 应用程序并尝试从另一个视图控制器中加载一个视图控制器。最初,我从 AppDelegate 加载第一个控制器,如下所示:

        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            window = new UIWindow(UIScreen.MainScreen.Bounds);
            appStartUpController = new AppStartUpController();
            window.RootViewController = appStartUpController;
            window.MakeKeyAndVisible();

            return true;
        }

这很好地加载了我的 AppStartUpController,它基本上只是一个带有背景图像和加载动画的加载屏幕,而我在后台进行 API 调用。一旦 API 调用完成,我想加载另一个视图控制器。

API 调用完成后,我尝试像这样加载下一个控制器:

            var controller = new CityPickerViewController();
            this.NavigationController.PushViewController(controller, false);

这是我的 CityPickerViewController:

    public partial class CityPickerViewController : UIViewController
    {
        CityPicker_View v;
        public CityPickerViewController(IntPtr handle) : base(handle)
        {
        }

        public CityPickerViewController ()
        {
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            v = CityPicker_View.Create();
            this.View = v;
        }

        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(false);
            UIImage i = UIImage.FromFile("citypickbackground.jpg");
            i = i.Scale(this.View.Frame.Size);

            this.View.BackgroundColor = UIColor.FromPatternImage(i);
        }
    }

我可能在这里遗漏了一些明显的东西,但 CityPickerViewController 不会加载。如果我在代码中设置断点,viewDidLoad / ViewWillAppear 将永远不会被覆盖。

我是一名新手程序员,如果有任何提示,我一定会很感激。提前致谢!

【问题讨论】:

标签: xamarin view uiviewcontroller xamarin.ios xib


【解决方案1】:

欢迎来到 SO!

尝试base.NavigationController.PushViewController(controller, true);,因为您没有本地导航控制器。

您的 CityPickerViewController 中也可能存在问题,因此如果不起作用,请尝试使用不同的 ViewController。

【讨论】:

  • 当使用base.NavigationController.PushViewController(controller, false); 并且我单步执行代码时,它挂在这一行。 AppStartUpController(通过 AppDelegate 启动时可以正常启动)具有此方法:public AppStartUpController():base(null,null)。在 CityPickerViewController 中,基本方法是 public CityPickerViewController () // :base(null, null)。我不得不注释掉 base(null,null) 因为这会导致代码在尝试实例化新的 CityPickerViewController 时挂起。
  • 您能否放置一个异常捕获点,并查看消息到达那里时的内容?现在还能用吗?
  • 它看起来好像 base.NavagationController 为空,因为它返回空引用异常。
  • 检查你的 Storyboard 看看你是否有一个“navigationController”?
  • 我没有使用故事板
猜你喜欢
  • 2017-09-17
  • 1970-01-01
  • 2015-12-02
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多