Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在多个故事板中使用相同的UIViewController_Ios_Uiviewcontroller_Storyboard_Uistoryboard_Xib - Fatal编程技术网

Ios 在多个故事板中使用相同的UIViewController

Ios 在多个故事板中使用相同的UIViewController,ios,uiviewcontroller,storyboard,uistoryboard,xib,Ios,Uiviewcontroller,Storyboard,Uistoryboard,Xib,我最近正在使用的iOS应用程序中有三种类型的用户,用户类型如下所示: 标准用户 队长 董事会成员 由于用户的功能可能不同,我认为在应用程序中有三个故事板是有意义的,每个故事板都包含当前登录用户的各自流程。因此,故事板将是: 标准用户故事板 队长故事板 董事会成员故事板 到目前为止,一切都很好 现在,我有一个TasksViewController,它负责显示特定于当前登录用户的任务,这个视图控制器是在XIB中创建的。TasksViewController提供了一个通用的功能,我应该能够在所

我最近正在使用的iOS应用程序中有三种类型的用户,用户类型如下所示:

  • 标准用户
  • 队长
  • 董事会成员
由于用户的功能可能不同,我认为在应用程序中有三个故事板是有意义的,每个故事板都包含当前登录用户的各自流程。因此,故事板将是:

  • 标准用户故事板
  • 队长故事板
  • 董事会成员故事板
到目前为止,一切都很好

现在,我有一个TasksViewController,它负责显示特定于当前登录用户的任务,这个视图控制器是在XIB中创建的。TasksViewController提供了一个通用的功能,我应该能够在所有故事板中使用TasksViewController,这对我来说有一定的逻辑意义

问题是:

  • 这样做对吗
  • 如果这样做是正确的,那么有可能这样做吗
  • 如果可能,如何实施
      • 这样做对吗
      这取决于您的全局项目。请记住,您建议的是可能的,但可能会使代码难以理解/调试。事实上,假设您通过从XIB手动实例化控制器来推动控制器,如何处理来自该控制器的segue(假设segue必须具有不同的行为,具体取决于用户类型)?根据用户类型切换segue?如果太频繁的话会很难看

      • 有可能吗?如何实施
      当然可以。例如,创建一个专用于共享组件的故事板,并在需要时动态实例化控制器(代码段用Swift编写,方法与Objective-C相同)

      这将实例化共享故事板中包含的控制器,并将其呈现给用户。这是老办法,但在处理多个故事板时,这是最好的解决方案

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


      希望这有帮助

      是的,你能做到。我认为重用同一个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"];
      

      以您建议的方式呈现
      TasksViewController
      是有意义的,而且肯定会起作用,但是,
      TasksViewController
      不会出现在Xcode内的情节提要设计界面中。我只是想知道是否有一种方法可以在多个故事板中显示
      TasksViewController
      。很确定您要问的是,您是否可以在所有三个故事板中看到嵌入在XIB中的设计。几乎可以肯定这是不可能的。@SteveMadsen,明白了!这就是我的要求。我不确定我所要求的是否是一个故事板功能,但是,至少对我来说,它听起来是合乎逻辑的。我同意它可能非常有用。您应该提交一个增强或新功能请求,然后,如果您正在参加WWDC,可能会去实验室和Xcode工程师谈谈。
      UIStoryboard *sb = [UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:[NSBundle mainBundle]];
      TaskController *nextOpportunity = [sb instantiateViewControllerWithIdentifier:@"YourIdentifier"];