[英]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.