我正在重写一个将代码从 Objective-C 转换为 swift 的教程。该应用程序从 VC 开始,其中有 3 个滑块(红色、绿色和蓝色)用于设置背景颜色、颜色名称标签和链接到第二个 VC 的按钮。在第二个 VC 中,第一个 VC 中的颜色用作背景,用户有机会命名颜色。
当用户输入颜色名称时,它应该将新的颜色名称返回到原始 VC,并且显示颜色名称的标签应该显示输入的文本。
以下是导致问题的代码:
func textFieldShouldReturn(nameEntry: UITextField) -> Bool
{
ViewController().colourLabel.text = nameEntry.text
nameEntry.resignFirstResponder()
dismissViewControllerAnimated(true, completion: nil)
return true
}
错误 ”致命错误: 生成“展开可选值时意外发现 nil”。但是调试 nameEntry.text 中包含一个字符串。
我有点难住了。我可以尝试为放松继续做准备,但它是一个教程应用程序。
Cheers
ViewController()
实际上创建了一个新的实例ViewController
。这不是对已经存在的参考ViewController
。您可以做的是在第二个 ViewController 中创建一个指向第一个 ViewController 的弱变量,并在prepareForSegue 或显示第二个 ViewController 时将其设置。
class SecondViewController : UIViewController {
weak var firstViewController : ViewController?
// Other code
func textFieldShouldReturn(nameEntry: UITextField) -> Bool
{
firstViewController?.colourLabel.text = nameEntry.text
nameEntry.resignFirstResponder()
dismissViewControllerAnimated(true, completion: nil)
return true
}
}
第一个视图控制器内部prepareForSegue
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "SecondViewController" {
let secondViewController = segue.destinationViewController as SecondViewController
secondViewController.firstViewController = self
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)