我有一个包含许多视图的UIViewController
,其中一个是按钮(其标签显示默认选项),当按下该按钮时,打开一个新的UIViewController
,其中包含一个由多个选项组成的UICollectionView
。当选择UICollectionView
中的某一项时,我们返回到原始UIViewController
,而UICollectionView
中的项将成为在原始UIViewController
中按下的按钮的标签。
问题是我不知道该怎么安排。我更熟悉Android平台,所需的功能更容易设置。我所需要做的就是创建一个全屏对话框,当一个项目被按下时,请取消对话框并更改按钮标题。然而,在iOS中,AlertController
类的功能似乎受到限制(我尝试添加一个UICollectionView
作为子视图,但效果不太好)。因此,我继续阅读关于安卓和iOS设计指南之间的区别,并根据我所读到的,我应该使用模态UIViewController
。但是,如果没有选择一个选项,我希望能够返回到原始的UIViewController
,因此我在堆栈中设置了一个带有两个VC的UINavigationController
。当我选择故事板中的模式选择时,第二个VC没有显示后退按钮,但是当我选择普通显示选项时,后退按钮显示。当一个项目被按下,一个对第一个VC的引用被创建,按钮标签被改变,第二个VC被弹出堆栈(理想情况下)。
我想知道在iOS环境中设置所需功能的正确(最佳)方法。另外,我想知道你的评分方法是什么标准的?
发布于 2018-09-04 19:46:23
您所描述的是如何让ViewControllers彼此交谈。有几种方法可以做到这一点。
下面是如何做1。
从调用视图控制器向目标视图控制器添加一个segue。在StoryBoard中,请给seque一个名称,以便您以后能够识别它。
在调用视图控制器上,确保有按钮的出口。使用StoryBoard编辑器添加出口。
当按下按钮时,让它触发segue。
在您的调用视图控制器中,确保有一个func prepare(for segue: UIStoryboardSegue, sender: Any?)
。在此函数中,添加代码,通过使用您在故事板上设置的名称来检测哪个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.
https://stackoverflow.com/questions/52172461
复制相似问题