【问题标题】:Having issues displaying modal view programmatically以编程方式显示模式视图时出现问题
【发布时间】:2026-02-07 11:15:01
【问题描述】:

我对 iOS 编程/Objective C 非常陌生。

我希望发生的事件流是:用户从标签栏视图控制器中选择标签。加载 VIEW A 后,它将打开一个模式窗口以获取一些信息

视图 A - (void)viewDidLoad

ModalYearPickerViewController *modalYearPickerViewController= [[ModalYearPickerViewController alloc] init];

[self presentViewController:modalYearPickerViewController animated:NO completion:nil];

我正在尝试立即加载我的年份选择器视图,以便用户可以从我的选择器中选择一年(在视图 B 中),然后在将值传递回视图 A 后关闭模式窗口。

现在,第一个视图加载,然后自动进入黑屏。我不确定为什么我的 modalYearPickerViewController 视图控制器上有一个选择器等。

任何以编程方式加载模态视图控制器的提示或帮助将不胜感激!

谢谢!

【问题讨论】:

  • 要测试一些东西,在调用present之前添加这一行:modalYearPickerViewController.view.backgroundColor = [UIColor redColor];,它会将黑色视图更改为红色吗?也尝试移动到 viewDidAppear
  • 是的,视图变红了,它也在 viewDidAppear 中做同样的事情
  • 那么问题将是您的模态年份选择器视图控制器配置不正确,请显示您如何设置它,并且有人可以帮助找出选择器不显示的原因

标签: ios objective-c cocoa-touch uikit


【解决方案1】:

如果您使用故事板:

UIStoryboard *storyBoard = [self storyboard]; 

这将返回您当前视图控制器的情节提要。我假设您的视图控制器 A 也在您的故事板上。

ModalYearPickerViewController *modalYearPickerViewController  = [storyBoard instantiateViewControllerWithIdentifier:@"ModalYearPickerViewController"];

这将从情节提要中实例化您的视图控制器。但是您必须做的另一件事是将您的视图控制器故事板 ID 设置为ModalYearPickerViewController。您可以在故事板中设置自定义视图控制器类的下方进行设置。

[self presentViewController:modalYearPickerViewController animated:NO completion:nil];

完成了。

【讨论】:

    【解决方案2】:

    如果您有该 viewContrioller 的 xib 文件,也必须加载它,为此您必须调用:

    ModalYearPickerViewController *modalYearPickerViewController = 
    [[ModalYearPickerViewController alloc] initWithNibName:@"ModalYearPickerViewController" bundle:nil];
    

    【讨论】:

    • 我正在使用情节提要,这个场景没有 .xib
    • 如果您使用故事板,为什么要以编程方式呈现 VC?
    • 这是一个我只想在某些情况下展示的VC。我希望我的用户使用我要加载的视图中的选择器选择一年。在他们选择了他们的年份后,我想去普通的 VC。编辑:正如我所提到的,我对此很陌生。如果我应该使用segue,那就这样吧。我想我在这个方向上有所作为,但也许不是......
    • 好的,这里有 2 个选项,要么给那个模态 VC 一个标识符,然后使用 instantiateViewControllerWithIdentifier: 加载它,要么创建一个从呈现 VC 到模态的 segue 并给它一个标识符并在需要时使用 performSegueWithIdentifier:sender: 自己调用它