2016-03-14 40 views
1

TableViewCell1: UITableViewCell类用下面的代码:调用awakeFromNib

override func awakeFromNib() { 
     super.awakeFromNib() 

      if (gender[0] == true){ 
       let origImage = UIImage(named: "maleP"); 
       let tintedImage = origImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
       genderButton[0].setImage(tintedImage, forState: .Normal) 
       genderButton[0].tintColor = UIColor(hex: "d8006c") 
      } 
      else{ 
       let origImage = UIImage(named: "maleP"); 
       let tintedImage = origImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
       genderButton[0].setImage(tintedImage, forState: .Normal) 
       genderButton[0].tintColor = UIColor(hex: "333333") 

     } 
     if (gender[1] == true){ 
      let origImage = UIImage(named: "femaleP"); 
      let tintedImage = origImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
      genderButton[1].setImage(tintedImage, forState: .Normal) 
      genderButton[1].tintColor = UIColor(hex: "d8006c") 
     } 
     else{ 
      let origImage = UIImage(named: "femaleP"); 
      let tintedImage = origImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
      genderButton[1].setImage(tintedImage, forState: .Normal) 
      genderButton[1].tintColor = UIColor(hex: "333333") 

     } 
    } 

,我就剩视图控制器,它具有的tableview控制器,问题是,我想清除细胞内的价值,回到之前想要重新加载它..

@IBAction func clearSelection(sender: AnyObject) { 
     staticlink = "" 
     attribute1 = [String]() 
     values1 = [String]() 

     gender = [false,false] 
     seasons = [false,false,false,false] 

     clickedsection = 10 

     cliedkarry = [false,false,false,false,false,false,false,false] 

     tableView.reloadData()  
} 

如何我可以将我的无所作为应用于tableview单元格或所有的tableview!

我试过tableView.reloadData(),但它没有工作,我猜是因为我用这种方式注册碎粒

tableData = [ 
    ["title": "Gender", "height": "120", "cellID": "cell1"]] 

tableView.registerNib(UINib(nibName: "TableViewCell1", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "cell1") 

这是我cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let record = tableData[indexPath.section]; 
    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(record["cellID"] as! String)! 
    cell.hidden = !(CBool(expandSections[indexPath.section] as! NSNumber)) 
    return cell 
} 

所以我怎么能重新加载tableview单元格内的数据

回答

2

我想清除细胞内的价值,要备份的是像以前一样重新装入

好吧,你有机会在prepareForReuse方法。每次单元将被重新循环时,都会调用它。

但是,你的代码看起来有什么问题是你正在做一些检查,显然需要留在控制器而不是单元的awakeFromNib。只需使用cellForRowAtIndexPath并向单元提供数据并在那里更新其UI。 awakeFromNib只会被调用一次。

+0

我该怎么做:( –

+0

ty我做到了;)它的工作 –

+0

很高兴你发现它有帮助。这也是很好的阅读:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html –

1

是的,你注册了nibs,因此tableView可以重用导致“awakeFromNib”不总是被调用的单元格。你应该在别处更新UI的东西。你不应该手动调用“awakeFromNib”。 在你tableViewCell

func updateUI() { 
    //do the UI stuff 
} 

在你的控制器

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let record = tableData[indexPath.section]; 
    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(record["cellID"] as! String)! 
    cell.hidden = !(CBool(expandSections[indexPath.section] as! NSNumber)) 
    if(!cell.hidden) cell.updateUI() 
    return cell 
} 
+0

类型'UITableViewCell'的值有没有成员'updateUI' –

相关问题