Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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
Xcode和ios-storybords是动态生成菜单和内容的好主意吗?_Ios_Swift_Storyboard - Fatal编程技术网

Xcode和ios-storybords是动态生成菜单和内容的好主意吗?

Xcode和ios-storybords是动态生成菜单和内容的好主意吗?,ios,swift,storyboard,Ios,Swift,Storyboard,假设您有一个动态生成的前菜单,这意味着运行时加载的所有不同项目都可以带您进入完全不同的场景。在场景被共享的情况下,不同的部分可能被显示/隐藏,并导致(再次)完全不同的场景 在其他应用程序语言(Android/java)或Delphi/ios中,我自己很容易处理这个问题。现在,熟悉了xcode/swift,我想知道情节提要是否会更麻烦而不是优势?(与自己加载xib文件和启动转换/分段相比) 然而,由于我没有看到很多人在网上发布关于如何处理和编码这些事情的例子(我在这里和那里找到了部分片段),我想我

假设您有一个动态生成的前菜单,这意味着运行时加载的所有不同项目都可以带您进入完全不同的场景。在场景被共享的情况下,不同的部分可能被显示/隐藏,并导致(再次)完全不同的场景

在其他应用程序语言(Android/java)或Delphi/ios中,我自己很容易处理这个问题。现在,熟悉了xcode/swift,我想知道情节提要是否会更麻烦而不是优势?(与自己加载xib文件和启动转换/分段相比)


然而,由于我没有看到很多人在网上发布关于如何处理和编码这些事情的例子(我在这里和那里找到了部分片段),我想我可能走错了路,我忽略了一些事情?

我不久前就停止使用故事板了。尤其是segue结构让我很恼火

与其检查正在准备哪个segue,并用值填充正确的目标控制器,不如创建一个VC并填充它,然后让导航控制器推送它,这样就简单多了

我认为在我删除了故事板之后,我的项目更干净了,代码也更易于遵循和调试

故事板是伟大的原型虽然。如果您想从故事板开始快速启动和运行某些内容,那么您可以从故事板中分离出各个XIB。另一个选择是在故事板中构建视图,但实例化它们并将它们推送到故事板序列的代码instad中的堆栈上

比较这一点:

let detailsController = DetailsViewController()
detailsController.object = object
navigationController?.pushViewController(detailsController, animated: true)
为此:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "some identifier" {
        if let detailController = segue.destinationViewController as? DetailsController {
                detailController.object = object
        }
    }
}
其中第二个是回调,您不能简单地从启动segue的位置进入回调

将单个VCs保留在xibs中的另一个好处是,每个职责保留一个文件,这样您可以更轻松地导航到正在寻找的控制器,如果与其他人一起工作,则可以更轻松地合并

Tl;博士

在我看来,故事板太乱了。 使用XIB时有以下好处:

  • 易于调试的更干净的分段
  • 每个责任一个文件。可以通过搜索文件快速搜索视图
  • 共享代码时更容易合并

  • 这个问题似乎有点模糊。
    我的理解停留在“动态生成前菜单”上

    我遇到过这样一种情况,即在编码时无法确定/预见iOS应用程序的实际UI:应用程序将连接到服务器,并且根据上下文,服务器将发送一个描述UI的XML/JSON:这里有一个按钮,那里有一个文本字段,那里有一个图像,等等。所有的UI都是通过编程实现的。 在这种情况下,是的,你不能物理地使用故事板。在这件事上也没有

    另一个例子:我遇到了一个没有“UI顺序性”的应用程序。你不能使用导航控制器,或者按照一定的顺序使用XIB,等等。他们希望所有的操作都是“web风格”:大量的按钮,用户可能点击任何东西,你面临更多的按钮,无法预见下一步的结果。 我确实使用了故事板,但这是我最糟糕的决定:最终我在大多数视图之间创建了分段。我最初想象的是一棵树,最后变成了一个完整的图形。在没有明确规范的情况下,它恰好以这种方式发展。我知道这很可怕,但我没有机会用更合适的设计重新开始。 所以不!在这种情况下也没有故事板

    如果您的任务看起来像正常的Apple/iPhone流程,那么我对情节提要没有任何异议

    然而,由于我没有看到很多人在网上发布关于如何处理和编码这些事情的例子…我想我可能走错了路,我忽略了一些事情

    故事板适用于动态内容。故事板只需为应用程序设置不同的“场景”,以及这些场景之间的过渡或分段即可。演示通常会显示一些动作触发的序列,比如轻触按钮或表格单元格,因为这很容易设置,无需任何代码。但您也可以通过编程方式轻松触发一个segue

    假设您有一个表,其中列出了公司目录中的人员、部门和建筑物,当用户点击某一行时,您希望根据该行中的数据类型转换到几个新场景中的一个。例如,点击某人会显示联系人信息,而点击建筑物会在地图上显示建筑物位置。因此,您可以这样设置故事板(我省略了部门场景——这只是更多的相同想法):

    现在,当用户点击目录中的一行时,您的代码可以查看点击了哪一行,获取与该行相关联的数据,找出要转换到的场景类型,并使用其标识符调用所需的segue,如:

    self.performSegueWithIdentifier("PersonSegue", sender:self)
    
    现在,您已经成功地切换到一个新场景,而不必提前知道点击该行将导致哪个场景。点击其他行,与该行关联的数据将导致您决定切换到其他场景

    故事板实际上是一个很大的帮助,至少有两个原因:

  • 在故事板中配置一个片段要比编写代码来创建所需的每个片段或重复编写代码来直接进行转换容易得多。您可以将所有这些转换的代码分解到一个单独的类中,但是您会得到类似于
    UIStoryboardSegue
    的东西

  • 在故事板中定义分段可以让您看到从一个场景到另一个场景的所有可能过渡。这对于向团队中的其他人、利益相关者等传达应用程序的工作方式非常有用