我有一个令人困惑的问题,我希望有人能给我一些解决问题的见解或指导。
我的应用非常简单。它是一系列带有 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 上复制结果用于测试。
在我的案例中,唯一奇怪的是,有时 Back 或 Next 按钮可能不是拖放 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 后,您应该使用 viewDidAppear
或 viewWillAppear()
。
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/