基本上,无论是使用 IB 还是以编程方式执行此操作,都必须在执行 segue 之前使用所需的所有数据配置新的视图控制器(或者通过代码呈现控制器)。
在您的情况下,只需设置图像名称(您的自定义视图控制器类你的视图控制器应该有一个特定的 String 属性来保存这个值)覆盖prepareForSegue
在当前视图控制器类中:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "yourModalSegueIdentifier" {
let imgName= (sender as! UIImageView)
let destination = segue.destinationViewController as UINavigationController
let yourController = destination.topViewController as YourViewController
yourController.imageName= <name here>
}
}
这就解决了传递数据的问题。
但在您的情况下,您需要单击图像的名称,并且只能通过 UIGestureRecognizer 添加单击事件来获得UIImageView
.
因此,您需要一个 uigesturerecognized,单击后将执行您创建的 segue。而且,您将无法获取图像资源的名称(您用于创建图像资源的名称)UIImage
using imageNamed:
)因为它不再可用,你必须使用accessibilityIdentifier
.
这使得一切变得更加复杂,似乎大部分都可以通过图形方式完成here https://stackoverflow.com/questions/11888891/how-do-i-add-a-segue-to-an-uigesturerecognizer and here https://stackoverflow.com/questions/17120476/click-event-on-uiimageview-programmatically-in-ios(但目前还不清楚如何做到这一点),但通常是通过代码完成的。
使用全局变量稍微简化一下:
var currentImage = ""
func viewDidLoad(){
...
...
let aTap = UITapGestureRecognizer(target: self, action: Selector("imageTapped:"))
aTap.numberOfTapsRequired = 1
//For every image, configure it with recognizer and accessibilityId:
firstImage.userInteractionEnabled = true
firstImage.addGestureRecognizer(aTap)
firstImage.accessibilityIdentifier = "firsImage"
...
}
func imageTapped(recognizer:UITapGestureRecognizer) {
let imageView = recognizer.view as! UIImageView
currentImage = imageView.accessibilityIdentifier
self.performSegueWithIdentifier("yourModalSegueIdentifier", sender: self)
}
并改变这一点:
yourController.imageName= <name here>
to this:
yourController.imageName= currentImage
Update:
是的,这是识别他们的唯一方法UIStoryboardSegue
有一个标识符。但请记住,segues 并不是从一个控制器转到另一个控制器的唯一方法,如果您完全以编程方式执行此操作(无 segues),则通常称为“presentViewController”。 Segues 是一个故事板概念。
再说一遍,关于 segue 名称/标识符,直到现在您才需要它,因为您从未从代码中引用该 segue,prepareForSegue 和 PerformSegueWithIdentifier 都需要它。只需选择 Segue 并在右侧检查器窗格中为其命名。
您描述的结构似乎没问题,唯一的问题是我不太确定是否真的需要 UIButtons,尝试使用从图像视图或直接从视图控制器到目标视图控制器的模式转场。
更新2:
如果您刚刚开始并需要一个免费课程来教您基础知识并让您构建一些有趣的 ios 应用程序,我推荐黑客与斯威夫特 https://www.hackingwithswift.com/.