【发布时间】:2017-09-06 14:33:40
【问题描述】:
我正在制作一个星座应用程序,在主视图控制器中,您可以单击一系列按钮来拉出一个弹出屏幕,该屏幕将显示他们的星座。
我有一个主要功能 buttonLayout(),它为我的 ViewController 制作所有按钮并设置它们的图像。
在您单击一个按钮后,我希望它弹出一个弹出窗口,其中包含他们在主视图控制器中单击的相同按钮
我大写的部分是我不知道该怎么做。
这是我的 ViewController 代码: // ViewController.swift // Zodiacv2
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)
}
}
这是我的弹出视图控制器的代码:
// 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()
}
});
}
}
在 showButton 函数中,我想访问索引,以便我可以说 sign[index] 或 buttonLayout() 函数中的 UIButton 图像。
【问题讨论】:
-
button.tag = 5=>button.tag = index。将 var 添加到 seconds VC,并在呈现之前,显示它。另外,为什么要使用 ChildVC?从您的屏幕截图来看,推送可能是您真正想要做的。 -
我对 .tag 属性有点困惑。如果我把这行代码放进去,这是否意味着我的索引每次都是 5? @Larme
-
不,会是0、1等等。问题是为什么每次都放5?目标是什么?如果你把索引作为标签,那么你可以很容易地检索到索引。
-
你真的需要将一个按钮传递给新的视图控制器,而不仅仅是一个图像或图像名称吗?
-
@Larme 我明白你在说什么!那行得通!谢谢!