我知道如何为我的行输入背景颜色,但我真的不知道如何只通过底部5行来过滤它是" cell.backgroundColor = UIColor.red;&# 34;而其余的保持不变。感谢那些可以帮助我的人,谢谢!
P.S:抱歉,我的快速生锈了。UITableView控制器
import UIKit
import FirebaseDatabase
var postData2 = [String]()
var postData3 = [String]()
var tableDataArray = [tableData]()
class ResultsController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference() //set the firebase reference
// Retrieve the post and listen for changes
databaseHandle = ref?.child("Posts3").observe(.value, with: { (snapshot) in
postData2.removeAll()
postData3.removeAll()
tableDataArray.removeAll()
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
let value = String(describing: snap.value!)
let rating = (value as NSString).integerValue
postData2.append(key)
postData3.append(value)
tableDataArray.append(tableData(boothName: key, boothRating: rating))
}
postData2.removeAll()
postData3.removeAll()
let sortedTableData = tableDataArray.sorted(by: { $0.boothRating > $1.boothRating })
for data in sortedTableData {
postData2.append(data.boothName)
let value = String(describing: data.boothRating)
postData3.append(value)
}
self.tableView.reloadData()
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postData2.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.font = UIFont.init(name: "Helvetica", size: 23)
cell.textLabel?.text = postData2[indexPath.row]
cell.detailTextLabel?.text = postData3[indexPath.row] + " ♥"
cell.detailTextLabel?.textColor = UIColor.red;
cell.detailTextLabel?.font = UIFont.init(name: "Helvetica", size: 23)
// cell.backgroundColor = UIColor.red;
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return 80
}
}
class tableData {
var boothName: String
var boothRating: Int
init(boothName: String, boothRating: Int) {
self.boothName = boothName
self.boothRating = boothRating
}
}
答案 0 :(得分:4)
一种简单的方法是进行条件检查,以查看indexPath.row
值是否在最后五个范围内。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if(indexPath.row >= postData2.count-5){
cell.backgroundColor = UIColor.red
}else{
cell.backgroundColor = UIColor.white /* Remaining cells */
}
return cell
}
答案 1 :(得分:4)
其他一些答案也可行 - 但是当它们被cellForRowAt
出列时使用具有已知配置的单元格更好,而不是每次出列单元格时都处理一堆可能的起始条件。为此,请将UITableViewCell子类化并覆盖prepareForReuse()
。在dequeueReusableCell
返回单元格之前调用此函数。然后可以在配置单元格之前将单元格设置为已知的起始点。如果可以在cellForRowAt
中以任何可能的方式接收单元格,那么很快就会出现很长的函数,并且有很多if / else条件。
条件
if indexPath.row >= postData2.count - 5 {
cell.backgroundColor = UIColor.red
}
可以按原样使用,prepareForReuse
负责处理细胞在回收时不保留任何设置。这是一个例子:
override func prepareForReuse() {
super.prepareForReuse()
backgroundColor = UIColor.white
}
使用这一个简单的设置,无论您是使用if / else方法还是使用子类化来充分利用prepareForReuse
,都可以进行清洗。但是一旦你在一个单元格中设置了不止一个东西,你会发现使用这个函数要复杂得多,并且导致细胞出现的错误要少得多 - 考虑如果有多个可能的话会发生什么单元格可以是颜色,或者单元格中有多个元素要配置多个可能的值...
答案 2 :(得分:2)
您可以添加简单的逻辑
if indexPath.row >=(postData2.count-5) {
cell.backgroundColor = UIColor.red
}else {
cell.backgroundColor = UIColor.white
}
答案 3 :(得分:0)
只需检查设置最后五行的红色的条件。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if(indexPath.row >= postData2.count-5){
cell.backgroundColor = UIColor.red;
}else {
cell.backgroundColor = UIColor.white; //white colour for other rows
}
return cell
}
答案 4 :(得分:0)
系统推荐使用此方法,此方法在某些情况下更可以避免重用(例如,当您修改单元格表面中控件的内容时)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if(indexPath.row >= postData2.count-5){
cell.backgroundColor = UIColor.red
}else{
cell.backgroundColor = UIColor.white /* Remaining cells */
}
return cell
}
如果它涉及数据处理,你可以创建一个新的NSMutableSet(),用于存储你的操作(普通数据丢失,存储在indexPath里面的didSelecetRow中)保存,无论如何,一个唯一的标记。
这些只是解决多路复用问题,处理变色,参考上述解决方案。
{{1}}