在 iOS 中显示选项列表的正确方法(swift)



我有一个包含许多视图的UIViewController,其中一个是一个按钮(其标签显示默认选项(,按下该按钮时,会打开一个新UIViewController,其中包含由多个选项组成的UICollectionView。当选择UICollectionView中的一个项目时,我们返回到原始UIViewControllerUICollectionView中的项目将成为在原始UIViewController中按下的按钮的标签。

问题是我不确定如何设置它。我更熟悉Android平台,所需的功能更容易设置。我需要做的就是创建一个全屏对话框,当按下一个项目时,关闭对话框并更改按钮标题。但是,在iOS中,AlertController类似乎功能有限(我尝试添加UICollectionView作为子视图,但效果不佳(。因此,我继续阅读有关Android和iOS设计指南之间的差异,并根据我所阅读的内容,我应该使用模态UIViewController。但是,如果未选择某个选项,我希望能够返回到原始UIViewController,因此我设置了一个堆栈中两个 VC 的UINavigationController。当我在情节提要中选择模态 segue 选项时,第二个 VC 不显示后退按钮,但当我选择正常显示选项时,会显示后退按钮。按下项目时,将创建对第一个 VC 的引用,更改按钮标签,并从堆栈中弹出第二个 VC(理想情况下(。

我想知道在iOS环境中设置所需功能的正确(最佳(方法。另外,我想知道您根据什么标准对方法进行评分?

你描述的是如何让视图控制器相互通信。 有几种方法可以做到这一点。

在一个视图控制器
  1. 中,保持变量指向另一个视图控制器。 在这种情况下,请在目标中创建一个指向调用方的变量。 当您关闭目的地时,在做出选择后, 使用该变量更新调用方。

  2. 使用通知。这是任何对象调用另一个对象的间接方式。 您必须提前设置这些,但它非常有用,尤其是在 有问题的类不会自然交互。

这是如何做 1.

将 segue 从调用视图控制器添加到目标视图控制器。 在情节提要中,为续集命名,以便以后可以识别它。

在调用视图控制器上,确保按钮有插座。 使用情节提要编辑器添加插座。

按下按钮时,让它触发 segue。

在调用视图控制器中,确保存在func prepare(for segue: UIStoryboardSegue, sender: Any?)。 在此函数中,添加代码以检测使用您在情节提要上设置的名称触发了哪个 segue。 如果你只有一个 segue,你可以省略它。

在函数中添加以下内容:

if segue.identifier == "your-segue-identifier-string" {
if let dest = segue.destination as? OptionsViewController {
dest.bookmarkViewController = self
}
}

在选项视图控制器中,添加一个变量以书签调用视图控制器。 使其成为可选(使用?

var bookmarkViewController: MyParentViewController?

在 MyParentViewController 中,添加一个更新按钮标题的函数。

func updateButton(title: String) {
// Update button title here using the outlet.
}

在选项视图控制器中,选择选项后,使用 bookmarkViewController var 调用调用方中的按钮更新函数。

self.bookmarkViewController.updateButton(title: new-title-goes-here)
// dismiss the options view controller.

相关内容

  • 没有找到相关文章

最新更新