如何在返回ViewController时重新触发randomElement()获取新提示
解决方法
问题出在viewDidLoad方法仅在ViewController首次加载时执行一次,当你从其他页面返回时,该方法不会再次触发,因此提示内容不会更新。你需要将生成随机提示的逻辑移至viewWillAppear(_:)或viewDidAppear(_:)方法中,这两个方法会在ViewController即将显示/已经显示时被调用,包含从其他页面返回的场景。
修改后的代码:
import UIKit class MainMenuViewController: UIViewController { @IBOutlet weak var randomtipLabel: UILabel! // 将tips数组设为类属性,避免重复创建实例 private let tips = ["tip 1", "tip 2", "tip 3"] override func viewDidLoad() { super.viewDidLoad() // 首次加载时初始化提示 updateRandomTip() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 每次页面即将显示时更新提示 updateRandomTip() } private func updateRandomTip() { guard let randomTip = tips.randomElement() else { // 处理数组为空的边界情况,避免崩溃 randomtipLabel.text = "暂无提示" return } randomtipLabel.text = randomTip randomtipLabel.sizeToFit() } }
关键说明:
viewWillAppear(_:):在ViewController的视图即将出现在屏幕上时触发,适合在此处更新UI内容,确保每次返回主页面都能刷新提示。- 将
tips数组定义为类的私有属性,避免每次调用方法时重复创建数组实例,提升代码效率。 - 使用
guard let安全解包randomElement()的返回值,防止数组为空时触发崩溃(即使当前示例数组有内容,养成安全处理可选值的习惯也很重要)。
内容的提问来源于stack exchange,提问作者Wasko Ltd
相关产品推荐
相关产品推荐

