swift - 快速将 TableView 数据传递给 DetailViewController

标签 swift

我有一个简单的 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/

相关文章:

arrays - addObjectsFromArray 到现有数组的开头

ios - 如何使用 Parse TableView 传输图像

ios - 无法形成对类实例的弱引用

ios - 使用 NSCalendar 为日期添加一天

ios - 应用程序:didFinishLaunchingWithOptions: method getting called on app crash

ios - 更改 Skobblers SKMaps for iOS 中的路线宽度

ios - 无法配置 Firebase InstanceID

Swift:CoreData 符合 MKAnnotation

Swift:从父类(super class)访问自己的属性(property)

ios - 如何在我的应用程序中使用变量 (Bool) 来控制在应用程序后台时是否可以显示远程通知?