从另一个 ViewController 呈现故事板 ViewController

Posted

技术标签:

【中文标题】从另一个 ViewController 呈现故事板 ViewController【英文标题】:Present storyboard ViewController from another ViewController 【发布时间】:2012-02-13 23:51:13 【问题描述】:

我的 ios 应用的 Storyboard 中有多个 UIViewController。我想从不同的 UIViewController 打开其中一个 UIViewController(在情节提要中)。

我已经尝试了下面的代码,但即使我在 iOS 5 之前使用它并且它运行良好,它也无法正常工作。

- (IBAction)addNotes:(id)sender 
    NotesViewController *notesView = [[NotesViewController alloc] initWithNibName:@"NotesViewController" bundle:nil];
    [self presentModalViewController:notesView animated:YES];

如何使用 iOS 5 Storyboards 执行此操作?

【问题讨论】:

【参考方案1】:

假设您有故事板,请转到故事板并为您的 VC 提供一个标识符(检查器),然后执行以下操作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER"];
[self.navigationController pushViewController:vc animated:YES];

假设你有一个你想做的 xib 文件:

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NIBNAME" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];

没有 xib 文件:

UIViewController *vc = [[UIViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];

【讨论】:

嘿,谢谢 darwin,您的回复...但是 xib 出现在情节提要中? 误解了你的问题。更新了我的答案。做方法 1)。 嘿,我检查了第一种方法,但没有运气,达尔文,它崩溃了 它说什么?您是否在 SB 中输入了 viewController 的标识符?请务必使用 UIViewController 而不是 UIView 进行标识符!这个做了很多次。这个工作。你的 SB 叫 MainStoryboard 吗? 嘿 darwin,您的代码有效,是我的拼写错误导致它无法正常工作,抱歉,我尝试在 StoryBoard 中不添加标识符名称,但它有效,这意味着他们不需要在SB中添加标识符名称吗?【参考方案2】:

以下内容适用于 Swift 3.0 及更高版本。

故事板

let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let mainViewController = storyBoard.instantiateViewController(withIdentifier: "Identifier")
self.navigationController?.pushViewController(mainViewController, animated: true)

.xib

    let viewController = UIViewController(nibName: "NibName", bundle: nil)
    self.navigationController?.pushViewController(viewController, animated: true)

没有.xib

let viewController = UIViewController()
self.navigationController?.pushViewController(viewController, animated: true)

【讨论】:

【参考方案3】:

更新到 Swift 3.1 版本

如果您还没有嵌入导航控制器,那么

let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.present(viewController2, animated: true, completion: nil)

如果您嵌入了导航控制器,那么

let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.navigationController?.pushViewController(viewController2, animated: true)

【讨论】:

【参考方案4】:

斯威夫特 5

let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ControllerIdentifier")
self.present(vc, animated: true, completion: nil)

【讨论】:

【参考方案5】:

在 swift 4.2 答案中,对于那些想要此答案而无需在模态和 swift 更新版本中导航的人。

let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "mainViewController")
self.present(controller, animated: true, completion: nil)

【讨论】:

【参考方案6】:
UIViewController *initialHelpView = [[UIStoryboard storyboardWithName:@"StoryBoard_IDentifier" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController_Identifier"];
[self presentViewController:initialHelpView animated:YES completion:nil];

【讨论】:

以上是关于从另一个 ViewController 呈现故事板 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 Popover 中关闭显示为 Popover segue 的 ViewController

从模态 ViewController 呈现 UIImagePickerController

swift3:如何将 xib 呈现给 viewcontroller

故事板中的PresentModalViewController以编程方式iOS 5

我如何在 Cocoa Touch 库中使用故事板

iPad SplitViewController - 使用 iPhone 故事板 ViewController