按下一个按钮并使相同的按钮出现在同一页面上

Posted

技术标签:

【中文标题】按下一个按钮并使相同的按钮出现在同一页面上【英文标题】:Press a button and have that same button appear on the same page 【发布时间】:2017-09-04 02:56:48 【问题描述】:

我正在构建一个星座应用程序,其中每个星座都是一个按钮。

当您单击带有您标志的按钮时,屏幕上会出现一个弹出视图控制器,其中包含您的星座。

我为一个星座/星座构建了应用程序

同样,每个图像和相应的标志标题都是一个按钮。

所以鱼的符号和“双鱼座”这个词是一个按钮。

我想添加到我的应用程序中,您可以在其中单击任何星座,它会为您提供相应的信息。

我首先在界面构建器中构建了我的应用程序,然后添加了代码,这可能是我知识差距的来源。

**问题:我想知道是否有办法捕获我设置的图像 使每个按钮都显示在弹出屏幕上,而不是每次都显示双鱼座的图像。

这是我的视图控制器类,其中包含主要三个页面的代码

//  ViewController.swift
//  Zodiac
import UIKit
class ViewController: UIViewController 

var buttonImage: UIImage?

override func viewDidLoad() 
    super.viewDidLoad()


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


@IBAction func ShowCharacteristicsPopup(_ sender: UIButton) 
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopChar") as! PopUpViewController
    self.addChildViewController(popOverVC)
    popOverVC.view.frame = self.view.frame
    self.view.addSubview(popOverVC.view)
    popOverVC.didMove(toParentViewController: self)
    //let buttonTitle = sender.title(for: .normal)!
    //print(buttonTitle)
    //buttonImage = sender.currentImage!
    //print(buttonImage)


@IBAction func ShowDailyPopup(_ sender: UIButton) 
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopDay") as! PopUpViewController
    self.addChildViewController(popOverVC)
    popOverVC.view.frame = self.view.frame
    self.view.addSubview(popOverVC.view)
    popOverVC.didMove(toParentViewController: self)


@IBAction func ShowYearlyPopup(_ sender: UIButton) 
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopYear") as! PopUpViewController
    self.addChildViewController(popOverVC)
    popOverVC.view.frame = self.view.frame
    self.view.addSubview(popOverVC.view)
    popOverVC.didMove(toParentViewController: self)

这是我的弹出视图控制器类,其中包含弹出视图控制器的代码(如果您查看界面构建器地图,则为第三行屏幕)

//  PopUpViewController.swift
//  Zodiac
import UIKit
class PopUpViewController: UIViewController 
//@IBOutlet weak var vc: ViewController!
@IBOutlet weak var popUpButton: UIButton!


override func viewDidLoad() 
    super.viewDidLoad()
    self.showAnimate()
    //print(vc.buttonImage)
    //popUpButton.setImage(vc.buttonImage, for: .normal)


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


@IBAction func ClosePopUp(_ sender: UIButton) 
    removeAnimate()


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)
    );


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()
        
    );

在 ViewController 的 ShowCharacteristicsPopup 函数中,我尝试获取 sender.currentImage,然后在 popupviewcontroller 中访问它,但这使我的程序崩溃。

另外,如果有人有任何结构提示,我会全力以赴

【问题讨论】:

【参考方案1】:

你的想法是对的,但你要做的是:

    获取“ShowCharacteristicsPopup”中的UIImage

    在“ShowCharacteristicsPopup”函数中也为PopUpViewController的按钮设置UIImage

尝试类似:

popOverVC.popUpButton.setImage(sender.currentImage!, for: .normal)

这行代码在“ self.view.addSubview(popOverVC.view) “一个。

或者你可以移动这条线

var buttonImage: UIImage?

在 PopUpViewController 内部,然后在“ShowCharacteristicsPopup”上设置 popOverVC 的 buttonImage,然后您的代码应该可以更改“vc”。 “自我”。

【讨论】:

以上是关于按下一个按钮并使相同的按钮出现在同一页面上的主要内容,如果未能解决你的问题,请参考以下文章

在标签页子按钮单击上执行 A,在按下相同按钮 x 秒时执行 B

如何在同一页面上为 2 个无线电流制作播放/停止按钮?

如何消除“按下按钮”效果并使按钮在点击时变平

html如何做点击按钮出现一个层,点击另外一个按钮在同一位置出现另外一个层,原层隐藏的效果?

如何使 ChildViewController 在相同的按钮操作上出现和消失

在同一个 webView 中加载不同页面的按钮