首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iOS中显示选项列表的正确方法(快捷)

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

Stack Overflow用户
提问于 2018-09-04 18:56:51
回答 1查看 782关注 0票数 1

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

问题是我不知道该怎么安排。我更熟悉Android平台,所需的功能更容易设置。我所需要做的就是创建一个全屏对话框,当一个项目被按下时,请取消对话框并更改按钮标题。然而,在iOS中,AlertController类的功能似乎受到限制(我尝试添加一个UICollectionView作为子视图,但效果不太好)。因此,我继续阅读关于安卓和iOS设计指南之间的区别,并根据我所读到的,我应该使用模态UIViewController。但是,如果没有选择一个选项,我希望能够返回到原始的UIViewController,因此我在堆栈中设置了一个带有两个VC的UINavigationController。当我选择故事板中的模式选择时,第二个VC没有显示后退按钮,但是当我选择普通显示选项时,后退按钮显示。当一个项目被按下,一个对第一个VC的引用被创建,按钮标签被改变,第二个VC被弹出堆栈(理想情况下)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 19:46:23

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

  1. 在一个视图控制器中,保持一个指向另一个视图控制器的变量。在您的示例中,在目标中创建一个指向调用方的变量。当取消目标时,在做出选择后,使用变量更新调用方。
  2. 使用通知。这是任何对象调用另一个对象的间接方式。您必须预先设置这些,但是它非常有用,特别是当所讨论的类不是自然交互时。

下面是如何做1。

从调用视图控制器向目标视图控制器添加一个segue。在StoryBoard中,请给seque一个名称,以便您以后能够识别它。

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

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

在您的调用视图控制器中,确保有一个func prepare(for segue: UIStoryboardSegue, sender: Any?)。在此函数中,添加代码,通过使用您在故事板上设置的名称来检测哪个segue被触发。如果你只有一个,你可以省去这个。

在该函数中添加以下内容:

代码语言:javascript
运行
复制
    if segue.identifier == "your-segue-identifier-string" {
        if let dest = segue.destination as? OptionsViewController {
            dest.bookmarkViewController = self
        }
    }

在OptionsViewController中,添加一个var以书签调用视图控制器。使它可选(使用?)。

代码语言:javascript
运行
复制
var bookmarkViewController: MyParentViewController?

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

代码语言:javascript
运行
复制
func updateButton(title: String) {
    // Update button title here using the outlet.
}

在OptionsViewController中,当选择一个选项时,使用bookmarkViewController var调用调用方中的按钮更新函数。

代码语言:javascript
运行
复制
self.bookmarkViewController.updateButton(title: new-title-goes-here)
// dismiss the options view controller.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52172461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档