我正在重写一个教程,将代码从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 }
生成错误“致命错误:在解开可选值时意外发现为零”.但是调试nameEntry.text中有一个字符串.
我有点残忍我可以尝试做一个放松的准备,但它是一个教程应用程序.
干杯
解决方法
ViewController()实际上创建了一个新的ViewController实例.这不是对已经存在的ViewController的引用.您可以做的是创建一个弱变量,指向第二个ViewController中的第一个ViewController,并将其设置为prepareForSegue或当显示第二个View控制器时.
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 } }