我有两个视图控制器:ViewController1和ViewController2。 我的目标是,当满足ViewController1中的某个条件时触发segue时,viewController2中的文本字段将被禁用。
我设置了shouldPerformSegueWithIdentifier
和prepareForSegue
,一切正常,但是当我把条件崩溃时说它发现了一个错误,展开了一个可选的文本字段。
我的ViewController1是:
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject!) -> Bool {
if condition1=true{
return true
}
else{
return false
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier=="segue"){
let destVC:ViewController=segue.destinationViewController as! ViewController2
if n==1{
destVC.myTextField.enabled=false
}
}
}
答案 0 :(得分:2)
prepareForSegue
myTextField
ViewController2
unwrapping an optional textField
方法尚未初始化,因此您收到错误Bool
,为了解决您的崩溃,请创建一个ViewController2
} prepareForSegue
中的实例,并在override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier=="segue"){
let destVC:ViewController=segue.destinationViewController as! ViewController2
if n==1{
destVC.isEnabled=false
}
}
}
方法中传递其值。
isEnabled
在此ViewController2
内创建实例viewDidLoad
,并将其用于ViewController2
的{{1}}
var isEnabled: Bool = true
override func viewDidLoad() {
super.viewDidLoad()
self.myTextField.enabled = self.isEnabled
}
答案 1 :(得分:0)
此时尚未加载/实例化与目标控制器关联的视图。
在目标VC上创建一个实例boolean标志,并在prepare segue函数中设置它。然后在viewDidLoad或更高版本的目标VC中检查该开关并禁用文本字段。
答案 2 :(得分:0)
您可以在目标视图控制器中设置条件,然后就可以执行此操作
myTextField.userInteractionEnabled = false
启用和禁用文本字段的userInteractionEnabled。