Ios 从另一个ViewController | Swift中的函数捕获变量

Ios 从另一个ViewController | Swift中的函数捕获变量,ios,swift,xcode,uibutton,Ios,Swift,Xcode,Uibutton,我正在制作一个占星术应用程序,在主视图控制器中,你可以单击一系列按钮,弹出一个屏幕,显示他们的占星术 我有一个主要函数buttonLayout(),用于生成ViewController的所有按钮并设置它们的图像 在你点击一个按钮后,我希望它弹出一个与他们在主VIEWCONTROLLER中点击的按钮相同的弹出窗口 我大写的部分是我不知道该怎么做的 这是我的ViewController代码: //ViewController.swift //黄道带2 import UIKit class V

我正在制作一个占星术应用程序,在主视图控制器中,你可以单击一系列按钮,弹出一个屏幕,显示他们的占星术

我有一个主要函数buttonLayout(),用于生成ViewController的所有按钮并设置它们的图像

在你点击一个按钮后,我希望它弹出一个与他们在主VIEWCONTROLLER中点击的按钮相同的弹出窗口

我大写的部分是我不知道该怎么做的

这是我的ViewController代码: //ViewController.swift //黄道带2

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var headerLabel: UILabel! 
@IBOutlet weak var subHeaderLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    headerLayout()
    buttonLayout()
}

func headerLayout() {
    headerLabel.text = header
    subHeaderLabel.text = subHeader
}

func buttonLayout() {
    for index in 0..<9 {
        var yPos = 195
        var xPos = (105 * index) + 50
        if (xPos >= 300) {
            yPos += 135
            xPos -= 315
        }
        if (xPos >= 300) {
            yPos += 135
            xPos -= 315
        }
        let button = UIButton()
        let buttonImage = UIImage(named: sign[index])
        button.setImage(buttonImage, for: .normal)
        button.frame = CGRect(x: xPos, y: yPos, width: 105, height: 130)
        button.tag = 5
        button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
        view.addSubview(button)
    }
}

func buttonClicked() {
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopUp") as! PopUpViewController
    self.addChildViewController(popOverVC)
    popOverVC.view.frame = self.view.frame
    self.view.addSubview(popOverVC.view)
    popOverVC.didMove(toParentViewController: self)
}
}


在showButton函数中,我想访问索引,这样我就可以说是sign[index],或者从buttonLayout()函数中访问UIButton图像。

您只需将按钮的值注入新的视图控制器即可。 (这是您共享的代码中的代码)

但我会改变你展示按钮的方式。
最好只使用
UICollectionView
,然后处理每个单元格的点击(使用
UICollectionViewDelegate
)。

button.tag=5
=>button.tag=index。将一个var添加到seconds VC中,并在显示它之前显示它。还有,为什么要使用ChildVC?从你的截图来看,推送可能是你真正想要做的。我有点混淆了.tag属性。如果我把这行代码放进去,这是否意味着每次我的索引都是5@拉梅诺,它将是0,1,等等。问题是为什么每次投5?目标是什么?如果你把索引作为标记,那么你可以很容易地检索索引。你真的需要在新的视图控制器中传递一个按钮,而不仅仅是一个图像或图像名称吗?@Larme我明白你的意思了!成功了!!非常感谢。特性属性在做什么?或者我应该问,我是否需要为.characteristic属性创建一个变量,因为当我将此代码放入XCode时,我收到一个错误,说PopUpViewController没有成员特征。是的,您需要在PopUpViewController中创建一个。在这里,您将设置为显示该视图而按下的按钮的值。
//  PopUpViewController.swift
//  Zodiacv2
import UIKit

class PopUpViewController: UIViewController {

@IBOutlet weak var headerlabelPop: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    self.showAnimate()
    self.headerlabelPop.text = subHeader
}

func showButton() {
    let vc = UIStoryboard(name: "PopUp", bundle: nil).instantiateViewController(withIdentifier: "Main") as! ViewController

}

func showAnimate() {
    self.view.transform = CGAffineTransform(scaleX: 1.3,y: 1.3)
    self.view.alpha = 0.0
    UIView.animate(withDuration: 0.25, animations: {
        self.view.alpha = 1.0
        self.view.transform = CGAffineTransform(scaleX: 1.0,y: 1.0)
    });
}

@IBAction func closePopUp(_ sender: UIButton) {
    removeAnimate()
}

func removeAnimate() {
    UIView.animate(withDuration: 0.25, animations: {
        self.view.transform = CGAffineTransform(scaleX: 1.3,y: 1.3)
        self.view.alpha = 0.0
    }, completion: {(finished : Bool) in
        if (finished) {
            self.view.removeFromSuperview()
        }
    });
}
func buttonClicked(_ sender: UIButton) {
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopUp") as! PopUpViewController
    popOverVC.characteristic = sign[sender.tag]
    self.addChildViewController(popOverVC)
    popOverVC.view.frame = self.view.frame
    self.view.addSubview(popOverVC.view)
    popOverVC.didMove(toParentViewController: self)
}