我的课程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单元格中重新加载数据
答案 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
}