我有一个简单的tableview加载颜色数组(每个单元格具有不同的颜色)。我试图传递detailViewController的背景颜色当用户从colourTableviewcontroller按下颜色数组单元格时(我只想将单元格颜色传递为细节视图背景颜色) 我的代码如下.....
import UIKit
class colourTableviewcontroller: UITableViewController {
@IBOutlet weak var colorTableView: UITableView!
let colors = [UIColor.redColor(), UIColor.blueColor(),UIColor.greenColor(), UIColor.orangeColor(),UIColor.purpleColor(),UIColor.yellowColor(),UIColor.cyanColor(),UIColor.darkGrayColor(),UIColor.blackColor(), UIColor.brownColor(),UIColor.grayColor(), UIColor.magentaColor(), UIColor.whiteColor()]
var colourData = UIColor()
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.
}
override func viewDidAppear(animated: Bool) {
colorTableView.separatorColor = UIColor.clearColor()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return colors.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("colourCell", forIndexPath: indexPath) as UITableViewCell
cell.backgroundColor = self.colors[indexPath.row % self.colors.count]
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
colourData = self.colors[indexPath.row]
performSegueWithIdentifier("colourSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "colourSegue") {
let viewController = segue.destinationViewController as! DetailViewController
viewController.bc?.backgroundColor = colourData }
}}
// My DetailViewController as follows...
import UIKit
class DetailViewController: UIViewController {
@IBOutlet var bc: UIView!
override func viewDidLoad() {
self.bc.backgroundColor = UIView.appearance().backgroundColor
}
当我运行代码时,当我按下颜色数组时,我的DetailViewController背景颜色变为深色文本颜色.....
我不知道我错过了什么,或者我做错了方法/逻辑......
先谢谢.....
答案 0 :(得分:1)
首先在ColourTableviewcontroller
中将segue连接到表格视图单元而不是视图控制器并删除方法didSelectRowAtIndexPath
将prepareForSegue
替换为
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "colourSegue" {
let viewController = segue.destinationViewController as! DetailViewController
let selectedIndexPath = tableView.indexPathForCell(sender as! UITableViewCell)
viewController.color = colors[selectedIndexPath.row]
}
}
在DetailViewController
中声明变量color
var color : UIColor!
并在bc
viewDidLoad()
的颜色
bc.backgroundColor = color
附加变量的原因是IBOutlets
中的DetailViewController
在执行prepareForSegue
时尚不存在。
答案 1 :(得分:1)
您没有通过UIColor并在下一个View Controller中分配
您只需对现有代码进行一些修改
1)在DetailViewController中添加var recievedColor : UIColor!
2)在您的prepareForSegue中,将viewController.bc?.backgroundColor = colourData
替换为 viewController.recievedColor = colourData
3)在您的DetailViewController中,在viewDidLoad()函数中,将self.bc.backgroundColor = UIView.appearance().backgroundColor
替换为 self.bc.backgroundColor = recievedColor
你去吧!
答案 2 :(得分:0)
您需要传递颜色,然后将颜色指定给viewDidLoad()
上的视图。您正在为尚未初始化的视图指定变量。
执行如下操作:
class DetailViewController: UIViewController {
@IBOutlet var bc: UIView!
var selectedBackgroundColor: UIColor? // this should be set on the prepareForSegue method.
override func viewDidLoad() {
super.viewDidLoad()
if let selectedBackgroundColor = selectedBackgroundColor {
bc.backgroundColor = selectedBackgroundColor
}
}
希望这有帮助!