我有两个ViewControllers。 在VC1上我有搜索条件,在VC2上我有搜索结果。如果你想从VC2转到VC1,VC2就会被解雇。
在VC1上我有一个NSButton(样式检查,类型切换),默认情况下我希望它处于ON状态。 NSButton的目的是在结果中包含照片。
如果用户取消选中按钮并按下搜索,它将继续显示VC2,显示没有照片的搜索结果。
但是当用户返回VC1进行新搜索时,会发生不需要的行为: NSButton未经检查(我希望每次用户在VC1时都要检查它。此外,按钮是零。
为什么会发生这种情况,如何在每次关闭VC2时勾选按钮框?
我尝试启用它并将其设置为ONState但是因为它的nil会崩溃。
答案 0 :(得分:0)
我设法通过添加
使其按照我想要的方式执行switch.state=1
就在执行从VC1到VC2的segue之前。
但是,我不认为这是最优雅的解决方案,因为按钮仍为零。
更新: 我已经发现问题出现了,当它从VC1进入VC2时VC1变为零,当VC2被解除时它也变为零。因此崩溃。一种解决方案是使用代表。
VC1:
class FirstViewController: UIViewController,SecondViewControllerProtocol {
@IBOutlet var firstName: UITextField!
@IBOutlet var lastName: UITextField!
@IBOutlet var subscribeSwitch: UISwitch!
@IBAction func goToSecondVC(_ sender: Any) {
let viewController = self.storyboard?.instantiateViewController(withIdentifier: String(describing: SecondViewController.self)) as! SecondViewController
viewController.delegate = self
self.present(viewController, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func dismissViewController() {
if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController"){
subscribeSwitch.isOn=true
}
}
}
VC2:
protocol SecondViewControllerProtocol {
func dismissViewController()
}
class SecondViewController: UIViewController {
var delegate:SecondViewControllerProtocol!
@IBAction func goBackToFirstVC(_ sender: Any) {
self.dismiss(animated: true) {
self.delegate!.dismissViewController()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 1 :(得分:0)