【发布时间】: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"?如果是这样,请检查下面的答案