【问题标题】:How to change label text of a label in a popover view controller when pressing a button in the main view?在主视图中按下按钮时,如何在弹出视图控制器中更改标签的标签文本?
【发布时间】:2020-06-08 03:58:30
【问题描述】:

我对 Swift 比较陌生。我有一个主视图控制器ViewControllerMain 和一个弹出视图控制器PopUpVC,它只有一个标签。我有一个函数infoClicked,当单击信息按钮时,它会显示带有另一个函数(showPopover)的弹出框。当我单击按钮时,我想更改弹出框的标签文本。但是,对于当前代码,标签始终显示“默认”。

这是我的代码:

class ViewControllerMain: UIViewController, UIPopoverPresentationControllerDelegate, GetTimesUsed {

     let tipController: PopUpVC = PopUpVC().self

     @IBAction func infoClicked(_ sender: UIButton) {
          tipController.tipText = "Success"
          showPopover()
     }

     func showPopover() {

        let myViewController = storyboard?.instantiateViewController(withIdentifier: "popupController")

        myViewController?.preferredContentSize = CGSize(width: 350, height: 200)
        myViewController?.modalPresentationStyle = .popover

        let popOver = myViewController?.popoverPresentationController
                popOver?.delegate = self
        UIView.animate(withDuration: 1, animations: {
            self.GifView.alpha = 0.7
        })

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.45) {
            UIView.animate(withDuration: 0.5, animations: {
                self.present(myViewController!, animated: true, completion: nil)
            })
        }
                popOver?.permittedArrowDirections = .down
                popOver?.sourceView = self.view

        var passthroughViews: [AnyObject]?
        passthroughViews = [infoButton]
        myViewController?.popoverPresentationController?.passthroughViews = (NSMutableArray(array: passthroughViews!) as! [UIView])

        popOver?.sourceRect = infoButton.frame
    }
}
class PopUpVC: UIViewController {

    @IBOutlet weak var tip: UILabel!
    var tipText: String = "Default"

    override func viewDidLoad() {
        super.viewDidLoad()
        tip.text = tipText

        // Do any additional setup after loading the view.
    }
}

感谢您的帮助。

【问题讨论】:

  • 能否也添加showPopover功能代码供参考?
  • 似乎您正在实例化 popoverController 两次。一次在 let tipController: PopUpVC = PopUpVC().self 中,然后在你的 show popover 方法中再次作为 `let popOver = myViewController?.popoverPresentationController` 所以尝试在你的 showPopover 方法中添加 popOver.tipText = "Success"
  • 我按照你在showPopover 中对myViewController 说的做了,但它说Value of type 'UIViewController?' has no member 'tipText'
  • 对不起我的错误。误读代码。为了清楚起见,您的带有类 PopUpVC 的 popupController 是否将情节提要标识符设置为 "popupController"?如果是这样,请检查下面的答案

标签: ios swift


【解决方案1】:

如 cmets 中所述,您似乎将弹出控制器实例化了 2 次,因此请在您的 showPopOver 代码中尝试这样:

 let myViewController = storyboard?.instantiateViewController(withIdentifier:   "popupController") as! PopUpVC

    myViewController.preferredContentSize = CGSize(width: 350, height: 200)
    myViewController.modalPresentationStyle = .popover

    myViewController.tipText = '' //set to what ever

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多