在 swift 中关闭弹出窗口后刷新视图
Refresh view after popup is dismissed in swift
我正在观看本教程 youtube 并且我在弹出窗口中添加了按钮。按钮正在添加硬币(IAP),但问题是当我关闭弹出窗口时它不会刷新视图以查看更新硬币。如果我点击后退按钮然后再次出现,它就会更新。
所以问题是按下关闭按钮后如何刷新父视图。
这里是popupVC
import UIKit
class PopUpViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.8)
self.showAnimate()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func closePopUp(sender: AnyObject) {
self.removeAnimate()
//HERE SHOULD BE CODE TO RELOAD PARENT VIEWCONTROLER
}
func showAnimate()
{
self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
self.view.alpha = 0.0;
UIView.animateWithDuration(0.25, animations: {
self.view.alpha = 1.0
self.view.transform = CGAffineTransformMakeScale(1.0, 1.0)
});
}
func removeAnimate()
{
UIView.animateWithDuration(0.25, animations: {
self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
self.view.alpha = 0.0;
}, completion:{(finished : Bool) in
if (finished)
{
self.view.removeFromSuperview()
}
});
@IBAction func btnAddCoins(sender: UIButton) {
for product in list {
let prodID = product.productIdentifier
if(prodID == "XXXX") {
p = product
buyProduct()
break;
}
}
}
}
我没有复制所有 IAP 代码。
一个简单的方法是使用委托来处理这个问题。这个想法是,当您创建 PopUpViewController
时,您将向其分配委托。这意味着 parent VC 符合委托。
这里是委托的示例。请注意,建议支持一种处理成功、失败和取消的方法。
None部分代码经过编译测试,仅供参考
protocol IAPDelegate {
func purchaseSuccessful()
func purchaseCancelled()
func purchaseFailed()
}
你的 class 会变成这样。我省略了一堆你的代码。您还需要弄清楚在哪里处理 purchaseCancelled
和 purchaseFailed
。此外,您可能希望为调用提供更多信息(即参数),但我将其留给您自己解决。
class PopUpViewController: UIViewController {
weak var iapDelegate : IAPDelegate?
// Your other code here
@IBAction func closePopUp(sender: AnyObject) {
self.removeAnimate()
iapDelegate?.purchaseSuccessful()
}
}
你的 parent VC,我在这里称呼 ParentViewController
会是这样的
class ParentViewController: UIViewController, IAPDelegate
顺便说一句,你应该考虑更好的 class 命名。如果 PopUpViewController
确实是您购买的 IAP VC,那么就这样命名。如果你想要另一个弹出视图控制器会发生什么?你想给它起什么名字?
我正在观看本教程 youtube 并且我在弹出窗口中添加了按钮。按钮正在添加硬币(IAP),但问题是当我关闭弹出窗口时它不会刷新视图以查看更新硬币。如果我点击后退按钮然后再次出现,它就会更新。
所以问题是按下关闭按钮后如何刷新父视图。
这里是popupVC
import UIKit
class PopUpViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.8)
self.showAnimate()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func closePopUp(sender: AnyObject) {
self.removeAnimate()
//HERE SHOULD BE CODE TO RELOAD PARENT VIEWCONTROLER
}
func showAnimate()
{
self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
self.view.alpha = 0.0;
UIView.animateWithDuration(0.25, animations: {
self.view.alpha = 1.0
self.view.transform = CGAffineTransformMakeScale(1.0, 1.0)
});
}
func removeAnimate()
{
UIView.animateWithDuration(0.25, animations: {
self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
self.view.alpha = 0.0;
}, completion:{(finished : Bool) in
if (finished)
{
self.view.removeFromSuperview()
}
});
@IBAction func btnAddCoins(sender: UIButton) {
for product in list {
let prodID = product.productIdentifier
if(prodID == "XXXX") {
p = product
buyProduct()
break;
}
}
}
}
我没有复制所有 IAP 代码。
一个简单的方法是使用委托来处理这个问题。这个想法是,当您创建 PopUpViewController
时,您将向其分配委托。这意味着 parent VC 符合委托。
这里是委托的示例。请注意,建议支持一种处理成功、失败和取消的方法。
None部分代码经过编译测试,仅供参考
protocol IAPDelegate {
func purchaseSuccessful()
func purchaseCancelled()
func purchaseFailed()
}
你的 class 会变成这样。我省略了一堆你的代码。您还需要弄清楚在哪里处理 purchaseCancelled
和 purchaseFailed
。此外,您可能希望为调用提供更多信息(即参数),但我将其留给您自己解决。
class PopUpViewController: UIViewController {
weak var iapDelegate : IAPDelegate?
// Your other code here
@IBAction func closePopUp(sender: AnyObject) {
self.removeAnimate()
iapDelegate?.purchaseSuccessful()
}
}
你的 parent VC,我在这里称呼 ParentViewController
会是这样的
class ParentViewController: UIViewController, IAPDelegate
顺便说一句,你应该考虑更好的 class 命名。如果 PopUpViewController
确实是您购买的 IAP VC,那么就这样命名。如果你想要另一个弹出视图控制器会发生什么?你想给它起什么名字?