从另一个 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