ios - 间歇性问题设置 UISwitch

标签 ios swift

我有一个令人困惑的问题,我希望有人能给我一些解决问题的见解或指导。

我的应用非常简单。它是一系列带有 UISwitch 和标签的 View ,用作为客户选择一组产品的指导访谈。最后,它获取存储在一个类中的所有变量,并使用它们构建 PDF 提案。

除极少数情况外,一切正常。我曾两次出现在使用该应用程序的人面前,当他们转到之前的屏幕时,它无法在 View 中设置 UISwitch 元素。随着更多的播放,它开始表现得像预期的那样。

我知道变量仍然正确存储,因为如果您在演示此行为时生成 PDF,则所有内容都存在,而这些先前的答案应该已生成。

所有变量都存储在一个实例化为 newTracker 的类中:

class AnswerTracker: NSObject {

    var someVariable1: Bool = false
    var someVariable2: Bool = false
    ...

socket 看起来像:

@IBOutlet weak var outSomeSwitch1: UISwitch!
@IBOutlet weak var outSomeSwitch2: UISwitch!

设置这些开关是在 viewDidLoad() 中完成的,如下所示:

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    if newTracker.someVariable1 {
        outSomeSwtich1.setOn(true, animated: true)
    }
    if newTracker.someVariable2 {
        outSomeSwitch2.setOn(true, animated: true)
    }
}

谁能想到为什么这不能随机运行?它的第一个实例是具有最新操作系统的 iPhone 6s,第二个实例是具有最新操作系统的 7。其他应用程序也没有在后台运行。我 Handlebars 放在了它们上,但它们没有连接到我的开发机器上,所以我无法窥视发生了什么,我也无法在 4、5、5s、7 或 iPad Air 2 上复制结果用于测试。

在我的案例中,唯一奇怪的是,有时 BackNext 按钮可能不是拖放 segue。有时他们可以使用一些代码来决定下一个加载哪个屏幕,或者哪个屏幕应该先加载。

@IBAction func actionNextUpInside(_ sender: Any) {
        if newTracker.someVariable1 {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier :"viewSomeView1") as UIViewController
            self.present(viewController, animated: true)
        } else if newTracker.someVariable2 {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier :"viewSomeView2") as UIViewController
            self.present(viewController, animated: true)
        } else {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier :"viewSomeView3") as UIViewController
            self.present(viewController, animated: true)
        }
    }

问题是否存在于加载 View 的方式中?

欢迎任何见解。

最佳答案

viewDidLoad() 在从 Storyboard加载 View 后被调用一次以设置 View 。如果您想在 View 出现时更新 UI,在短暂地转到其他 View 后,您应该使用 viewDidAppearviewWillAppear()

override func viewWillAppear() {
    super.viewWillAppear()
    outSomeSwitch1.setOn(newTracker.someVariable1, animated: true)
    outSomeSwitch2.setOn(newTracker.someVariable2, animated: true)
}

关于ios - 间歇性问题设置 UISwitch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920611/

相关文章:

ios - dyld : Library not loaded: @rpath/Mapbox. 框架/Mapbox

ios - 按下按钮时发生的操作 - 快速

ios - URLSession 对象是资源密集型的吗?

swift - 导航按钮 用户位置

ios - 可达性有多可靠,我应该采取进一步的预防措施吗?

ios - 缩放圆圈uiview刚好足以填满屏幕

ios - 本地化 watchkit 配套应用显示名称

ios - AutoLayout 标签在屏幕右侧被截断

objective-c - 导入 Objective-C 文件会破坏 CocoaPod

ios - hidesBarsOnTap - 导航栏隐藏/显示事件?