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

时间:2018-09-04 18:56:52

标签: ios swift

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

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

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

1 个答案:

答案 0 :(得分:0)

您要描述的是如何使ViewController彼此交谈。 有几种方法可以做到这一点。

  1. 在一个视图控制器中,保持指向另一个视图控制器的变量。 在您的情况下,请在目标中创建一个指向调用者的变量。 撤消目的地后,做出选择后, 使用变量来更新调用方。

  2. 使用通知。这是任何对象调用另一个对象的间接方式。 您必须事先进行设置,但这非常有用,尤其是当 有问题的课程不会自然互动。

这里是怎么做1。

从调用视图控制器向目标视图控制器添加序列。 在StoryBoard中,为seque命名,以便以后识别。

在调用视图控制器上,确保您有按钮的插座。 使用StoryBoard编辑器添加插座。

按下按钮时,它会触发搜索。

在呼叫视图控制器中,确保有一个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
        }
    }

在OptionsViewController中,添加一个var来标记调用视图控制器。 将其设为可选(使用?)。

var bookmarkViewController: MyParentViewController?

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

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

在OptionsViewController中,选择一个选项后,使用bookmarkViewController var调用调用者中的按钮更新功能。

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