从另一个控制器调用awakeFromNib

时间:2016-03-14 08:33:49

标签: ios swift uitableview swift2

我的课程TableViewCell1: UITableViewCell包含以下代码:

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(),但它没有用,我猜是因为我以这种方式注册了nibs

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 个答案:

答案 0 :(得分:2)

  

我希望清除单元格中的值,以便重新加载之前的内容

好的,你在prepareForReuse方法中有这个机会。每次重新循环细胞时都会调用它。

然而,您的代码似乎有些错误,您正在进行一些显然需要留在控制器而不是单元格awakeFromNib的检查。只需使用cellForRowAtIndexPath并向单元格提供数据并在那里更新它的用户界面。 awakeFromNib只会被调用一次。

答案 1 :(得分:1)

是的,您注册了nib,因此tableView可以重用导致" awakeFromNib"并不总是被调用。您应该在其他地方更新UI内容。你永远不应该打电话给#34; 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
}