繁体   English   中英

在多个情节提要板中使用相同的UIViewController

[英]Using same UIViewController in Multiple Storyboards

目前,我正在使用的iOS应用中有三种类型的用户,下面列出了这些用户类型:

  • 标准用户
  • 队长
  • 董事会成员

由于用户的功能可以有所不同,因此我认为在应用程序中拥有三个故事板将是有意义的,每个故事板包含针对当前登录用户的各自流程。因此,故事板将为:

  • 标准用户故事板
  • 团队负责人故事板
  • 董事会成员故事板

到现在为止还挺好!

现在,我有一个TasksViewController,它负责显示特定于当前登录用户的任务,该View Controller是在XIB中创建的。 TasksViewController提供了一个通用功能,从我的逻辑上来说,我应该能够在所有Story Board中使用TasksViewController。

问题是:

  • 这是对的事吗?
  • 如果做对了,有可能这样做吗?
  • 如果可能,如何实施?
  • 这是对的事吗?

这取决于您的全球项目。 请记住,您的建议是可能的,会使代码难以理解/调试 确实,想像您通过从XIB手动实例化控制器来推送控制器,如何从该控制器处理segue(假设segue根据用户类型必须具有不同的行为)? 根据用户类型切换segue? 如果太频繁则很难看..

  • 有可能这样做吗? 如何执行呢?

当然是。 例如,创建一个专用于共享组件的情节提要,并在需要时即时实例化控制器(用Swift编写的代码段,在Objective-C中的方法相同)。

let sharedStoryboard: UIStoryboard = UIStoryboard(name: "SharedStoryboard", bundle: NSBundle.mainBundle())
let sharedController: UIViewController = sharedStoryboard.instantiateViewControllerWithIdentifier("ControllerIdentifier") as! UIViewController
self.navigationController?.presentViewController(sharedController, animated: true, completion: nil)

这将实例化包含在共享情节提要中的控制器,并将其呈现给用户。 这是旧方法,但是当处理多个情节提要时,这是最佳解决方案。

  • 那么该怎么办 ?

如果您只有几个控制器,建议您为每个用户复制它-如果将来需要在控制器上添加特定用户类型的功能,将来也会更容易。 如果您的应用程序有很大一部分是共享的,请使用上面介绍的方法。

希望这可以帮助!

是的,你可以这么做。 而且我认为最好重用相同的ViewController。 另一种方法是使用Storyboard来容纳所有可重用的视图控制器,并通过标识符重用ViewController。

这是xib的解决方案:

NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"TaskController"
                                                      owner:self
                                                    options:nil];

TaskController *tasks = (TaskController *)[nibViews objectAtIndex:0];

// Do the stuff you want here

为了完整起见,这里从情节提要中重用视图控制器:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:[NSBundle mainBundle]];
TaskController *nextOpportunity = [sb instantiateViewControllerWithIdentifier:@"YourIdentifier"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM