iOS 故事板滚动视图,内容环绕视图
iOS Storyboard Scroll View With Content Around View
在我的应用程序中,我有这个视图控制器,用户可以在其中输入信息来创建一个对象。在此视图的顶部有一个选项卡栏,在底部有一个按钮,用户点击该按钮可 create/save 对象。在这两个视图之间,我有一些元素,例如文本字段、标签和用户输入对象信息的其他一些东西(基本上是对象的表单)。
我现在正在尝试支持横向模式并向此视图控制器添加更多表单。问题是在较小的设备上,在横向上所有的表单元素和文本字段等都不适合。
我正在尝试使用滚动视图来解决这个问题。我使用 this Stack Overflow answer 让滚动视图在测试项目中工作(在我将概念移植到我的实际项目之前)。
唯一的问题是我无法使用该方法将按钮固定到屏幕底部。为了解决这个问题,我在主视图控制器(视图控制器 A)中创建了一个容器视图。该容器视图映射到包含滚动视图和内容的视图控制器(视图控制器 B)。然后在视图控制器 A 的容器视图下方,我能够添加 create/save 按钮。从设计的角度来看,这似乎是完美的。但是现在内容位于 create/save 按钮的单独视图控制器中,我实际上无法从用户输入文本字段的内容中获取内容和输入。
处理这种情况的最佳方法是什么?使用容器视图真的是最好的方法吗?有没有一种简单的方法可以将这些输入从文本字段映射回主视图控制器?
如果可能的话,我想尽可能多地在 Storyboard 中保留设计工作。在 Swift 中添加视图和设计元素将是最后的手段。但我很确定我需要使用某种类型的代码将该数据返回到主视图控制器,这完全没问题。
实现所需行为的最简单方法如下:
1) 为在 IB 中为您创建的嵌入转场指定自定义标识符。例如,"embedViewControllerB"
2) 在view controller A中添加如下参数:
weak var viewControllerB: ViewControllerB?
3) 在视图控制器中覆盖 prepare(for segue:)
函数。检查转场是否是您的嵌入转场,如果是,存储对 B 控制器的引用:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "embedViewControllerB" {
self.viewControllerB = segue.destination as! ViewControllerB
}
}
现在,当您单击按钮时,您可以通过 viewControllerB?
属性.
访问视图控制器 B 的内容
在此阶段,由您决定如何进行。您可以将 IBOutlets 设置为 B 中的文本视图并在 A 中读取它们的内容,或者您可以在 B 中实现一些函数,这将 return 必要的数据(可能在元组中?)。
希望对您有所帮助
在我的应用程序中,我有这个视图控制器,用户可以在其中输入信息来创建一个对象。在此视图的顶部有一个选项卡栏,在底部有一个按钮,用户点击该按钮可 create/save 对象。在这两个视图之间,我有一些元素,例如文本字段、标签和用户输入对象信息的其他一些东西(基本上是对象的表单)。
我现在正在尝试支持横向模式并向此视图控制器添加更多表单。问题是在较小的设备上,在横向上所有的表单元素和文本字段等都不适合。
我正在尝试使用滚动视图来解决这个问题。我使用 this Stack Overflow answer 让滚动视图在测试项目中工作(在我将概念移植到我的实际项目之前)。
唯一的问题是我无法使用该方法将按钮固定到屏幕底部。为了解决这个问题,我在主视图控制器(视图控制器 A)中创建了一个容器视图。该容器视图映射到包含滚动视图和内容的视图控制器(视图控制器 B)。然后在视图控制器 A 的容器视图下方,我能够添加 create/save 按钮。从设计的角度来看,这似乎是完美的。但是现在内容位于 create/save 按钮的单独视图控制器中,我实际上无法从用户输入文本字段的内容中获取内容和输入。
处理这种情况的最佳方法是什么?使用容器视图真的是最好的方法吗?有没有一种简单的方法可以将这些输入从文本字段映射回主视图控制器?
如果可能的话,我想尽可能多地在 Storyboard 中保留设计工作。在 Swift 中添加视图和设计元素将是最后的手段。但我很确定我需要使用某种类型的代码将该数据返回到主视图控制器,这完全没问题。
实现所需行为的最简单方法如下:
1) 为在 IB 中为您创建的嵌入转场指定自定义标识符。例如,"embedViewControllerB"
2) 在view controller A中添加如下参数:
weak var viewControllerB: ViewControllerB?
3) 在视图控制器中覆盖 prepare(for segue:)
函数。检查转场是否是您的嵌入转场,如果是,存储对 B 控制器的引用:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "embedViewControllerB" {
self.viewControllerB = segue.destination as! ViewControllerB
}
}
现在,当您单击按钮时,您可以通过 viewControllerB?
属性.
在此阶段,由您决定如何进行。您可以将 IBOutlets 设置为 B 中的文本视图并在 A 中读取它们的内容,或者您可以在 B 中实现一些函数,这将 return 必要的数据(可能在元组中?)。
希望对您有所帮助