我有一个简单的 tableview 加载颜色数组(每个单元格具有不同的颜色)。当用户按下 colourTableviewcontroller 中的颜色数组单元格时,我试图传递 detailViewController 的背景颜色(只是我想将单元格颜色传递为细节 View 背景颜色) 我的代码如下.....
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 背景颜色变为深色文本颜色......
我不知道我错过了什么或者我做错了方法/逻辑....
提前致谢......
最佳答案
首先在
<ColourTableviewcontroller
中将 segue 连接到 TableView 单元格而不是 View Controller ,然后删除方法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!
并在
viewDidLoad()
中设置bc
的颜色bc.backgroundColor = color
额外变量的原因是 DetailViewController
中的 IBOutlets
在执行 prepareForSegue
时还不存在。
关于swift - 快速将 TableView 数据传递给 DetailViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945498/