我有两个视图控制器。在第一个中,我有标签和4个代表颜色的按钮,以及一个名为next的按钮。当用户在第一个视图控制器中选择一个颜色然后单击下一个时,我希望实现这一点,我下一个viewController中的标签将自动具有该颜色。
这是我到目前为止所做的,但我无法使其发挥作用。
import UIKit
class ViewController: UIViewController {
var backGroundColor = UIColor()
@IBOutlet var face: UILabel!
@IBAction func red(sender: AnyObject) {
face.backgroundColor = UIColor.redColor()
}
@IBAction func green(sender: AnyObject) {
face.backgroundColor = UIColor.greenColor()
}
@IBAction func blue(sender: AnyObject) {
face.backgroundColor = UIColor.blueColor()
}
@IBAction func yellow(sender: AnyObject) {
face.backgroundColor = UIColor.yellowColor()
}
@IBAction func next(sender: AnyObject) {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("face") as! Face2
vc.newFace.backgroundColor = self.face.backgroundColor
self.navigationController?.pushViewController(vc, animated: true)
}
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.
}
}
// My Face2 class:
import UIKit
class Face2: UIViewController {
var backGroundColor = UIColor()
@IBOutlet var newFace: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// var vc = ViewController()
self.newFace.backgroundColor = backGroundColor
}
}
答案 0 :(得分:1)
欢迎来到SO。
你犯了一个常见的设计错误。
不要试图直接操纵第二个视图控制器的视图。这是糟糕的设计,往往不起作用。
而是向Face2类添加属性/属性。
在这种情况下,您可能只需要backgroundColor
属性。
在next
函数中设置该属性,然后在Face2类的viewDidLoad方法中,使用颜色设置需要使用自定义颜色的任何视图的背景颜色。如果您稍后决定需要更改颜色的视图集不同,则可以更改Face2类的代码,并且第一个视图控制器根本不需要更改。
你还需要摆脱vc2。这是没有意义的。您可以通过调用vc
创建一个新的Face2视图控制器instantiateViewControllerWithIdentifier
。那是你应该配置的那个。你在vc2中创建的那个从不用于任何东西。退出next()
函数后,它将立即取消分配。
答案 1 :(得分:0)
我的建议是将nsstring(按下颜色按钮时设置的字符串)属性设置为第二个视图控制器,并在第二个视图控制器视图中根据传递的字符串加载进行切换以设置背景颜色< / p>