swift - 如何在不重新启动页面的情况下更新导航控制器上一页的信息?
问题描述
我正在制作一个测验应用程序并拥有三个视图控制器,并且我还在使用导航控制器。控制器是:HomeController、LevelsController、PlayController。级别控制器上有 100 个级别作为按钮,除了级别 1 之外的所有级别最初都是灰色的。当我完成关卡时,其他关卡按钮被解锁并变得可点击。
我的问题:这仅在我返回 HomeController 并按下然后再次导航到 LevelsController 时才有效,当我简单地从 PlayController 返回到 LevelsController 时,它不会立即更新。
这是我在级别控制器中的代码:
import UIKit
class LevelsViewController: UIViewController {
var levels = [String]()
override func viewDidLoad() {
super.viewDidLoad()
for k in globalScore...99 {
// print("this is \(k)")
// print(levelButton)
levelButton[k].isEnabled = false
print("Have the levels updated??")
}
}
override func viewWillAppear(_ animated: Bool) {
for k in globalScore...99 {
levelButton[k].isEnabled = false
}
}
@IBOutlet var levelButton: [UIButton]!
@IBAction func levelSelect(_ sender: UIButton) {
self.level = sender.tag
performSegue(withIdentifier: "LevelToPlaySegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("my name is jacobson")
var vc2 = segue.destination as! PlayViewController
vc2.enteredLevel = self.level
}
}
如果将正确答案输入到文本字段中,我的 PlayController 有一个键盘和一个图像,该图像会更改为新图像。我还在 PlayController 的右上角有一个分数,它分配给 globalScore。随着全局分数的增加,当用户从 PlayController 回到 LevelsController 时,关卡页面应该有更多的关卡可供用户使用。
解决方案
你需要做的是改变你的逻辑,而不是在 viewDidLoad 上使用它,你还应该添加 ViewDidAppear 和 ViewWillAppear,以便在每次打开 viewController 时调用这些方法,而不是只在第一次打开。
推荐阅读
- file-management - 如何从 lf 文件管理器中打开多个文件?
- reactjs - 无法让 React-Beautiful-DND 和 React-Virtualized 一起工作
- python - 将数据帧结果连接到另一个数据帧
- c++ - 在 gtkmm 中滚动到 TextView 的底部
- javascript - Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)
- matplotlib - AWS EC2 导致 Streamlit ML App 出现问题
- python - cv2 从具有特定时间的图像数组创建视频
- django - 如何过滤 InheritanceQueryset 中的子类字段(避免 FieldError)
- reactjs - 将 React.Lazy 用于服务(非组件)类型的代码
- angular - mat-select-search 不加载初始列表