应用内购买后更新UITableView

时间:2018-08-02 01:13:26

标签: ios swift uitableview

我在import Foundation import UIKit func setupHeader(vc: UIViewController) { let headerFiller: UIView = { let view = UIView() view.translatesAutoresizingMaskIntoConstraints = false view.backgroundColor = supaGray return view }() let header: UIView = { let view = UIView() view.translatesAutoresizingMaskIntoConstraints = false view.backgroundColor = supaGray return view }() let logOutButton: UIButton = { let button = UIButton() button.translatesAutoresizingMaskIntoConstraints = false button.setTitle("Log Out", for: .normal) button.setTitleColor(.blue, for: .normal) button.titleLabel?.adjustsFontSizeToFitWidth = true button.titleLabel?.textAlignment = .left button.addTarget(self, action: #selector(handleLogOutButton), for: .touchUpInside) return button }() func handleLogOutButton() { } vc.view.addSubview(header) header.topAnchor.constraint(equalTo: vc.view.safeAreaLayoutGuide.topAnchor).isActive = true header.leftAnchor.constraint(equalTo: vc.view.leftAnchor).isActive = true header.rightAnchor.constraint(equalTo: vc.view.rightAnchor).isActive = true header.heightAnchor.constraint(equalToConstant: 40).isActive = true header.addSubview(logOutButton) logOutButton.centerYAnchor.constraint(equalTo: header.centerYAnchor, constant: -5).isActive = true logOutButton.leftAnchor.constraint(equalTo: header.leftAnchor, constant: 7).isActive = true logOutButton.widthAnchor.constraint(equalTo: header.widthAnchor, multiplier: 0.17).isActive = true logOutButton.heightAnchor.constraint(equalToConstant: 40).isActive = true vc.view.addSubview(headerFiller) headerFiller.topAnchor.constraint(equalTo: vc.view.topAnchor).isActive = true headerFiller.leftAnchor.constraint(equalTo: vc.view.leftAnchor).isActive = true headerFiller.rightAnchor.constraint(equalTo: vc.view.rightAnchor).isActive = true headerFiller.bottomAnchor.constraint(equalTo: header.topAnchor).isActive = true } 中包含以下代码,并且在完成沙盒购买后,我确认它可以运行SKPaymentTransactionObserver

.purchased

我的func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchasing, .deferred: break case .purchased, .restored: Settings.didPurchase = true DispatchQueue.main.async { tableView.reloadData() } SKPaymentQueue.default().finishTransaction(transaction) case .failed: // other code here } } } 的数据源包括以下功能:

UITableView

在调试时,我确认在调用func numberOfSections(in tableView: UITableView) -> Int { return Settings.didPurchase ? 3 : 4 } 之后会调用此函数,并在购买后返回tableView.reloadData()。但是,视图不会更新为包括额外的部分。仅当我关闭整个视图并在购买完成后重新加载它时,它才会更新,在这种情况下,它会触发另一个表视图重新加载,看起来应该是这样。

我的理论是,因为当我打电话给3UITableView并不是顶层视图(Apple发出警告,说购买成功,这涵盖了它),所以它不会更新查看,认为它不可见。但是,这合理吗?无论哪种方式,如何修复我的代码,以便在用户完成购买后按预期方式更新视图?

0 个答案:

没有答案
相关问题