目前我正在使用的iOS应用中有三种类型的用户,用户类型列在下面:
由于用户的功能可能不同,我认为在应用程序中有三个故事板是有意义的,每个故事板包含当前登录用户的相应流程。因此,故事板将是:< / p>
到目前为止,非常好!
现在,我有一个TasksViewController,负责显示特定于当前登录用户的任务,此View Controller是在XIB中创建的。 TasksViewController提供了一个通用功能,对我来说,我应该能够在所有故事板中使用TasksViewController,这对我来说具有一定的逻辑意义。
问题是:
答案 0 :(得分:1)
这取决于您的全球项目。请注意,您建议的可能,但会使代码难以理解/调试 。实际上,假设您通过从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)
这将实例化共享故事板中包含的控制器并将其呈现给用户。这是旧方式,但在处理多个故事板时,这是最好的解决方案。
如果您只有几个控制器,我建议您为每个用户复制它 - 如果您需要添加用户类型特定的功能,将来也会更容易一个控制器。如果您的应用的很大一部分是共享的,请使用上面介绍的方式。
希望这有帮助!
答案 1 :(得分:1)
是的,你可以这样做。我认为重用相同的ViewController是件好事。另一种方法是使用Storyboard来保存所有可重用的视图控制器,并通过标识符重用ViewControllers。
以下是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"];