I have two arrays of number which i'm trying to match and then want to change background of cell label in cellForRowAtIndexPath delegate in TableView
. But it is not catching my condition even when the condition meets correctly. This is my code:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if dataLoded {
if isGroupListView {
if localGroupChannelsArr.count > 0 {
noDataFoundView.isHidden = true
}else {
noDataFoundView.isHidden = false
}
return localGroupChannelsArr.count
}
if localSingleChannelsArr.count > 0 {
noDataFoundView.isHidden = true
}else {
noDataFoundView.isHidden = false
}
return localSingleChannelsArr.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
var cell = ChatRoomCellView()
var channelRoom = ChatRoom()
// var onlineStatus = OnlineUser()
if isGroupListView {
channelRoom = localGroupChannelsArr[indexPath.row]
cell = groupChatRoomsList.dequeueReusableCell(withIdentifier: "GroupRoomCellView") as! ChatRoomCellView
}else {
channelRoom = localSingleChannelsArr[indexPath.row]
cell = singleChatRoomsList.dequeueReusableCell(withIdentifier: "SingleRoomCellView") as! ChatRoomCellView
for (phone, number) in zip(numbers, onlineUserArray) {
print(phone)
print(phone,number.phone!)
if phone == number.phone
{
if number.status == "online"
{
print("Matched")
cell.onlineStatusLbl.backgroundColor = #colorLiteral(red: 0.08950354904, green: 0.807744801, blue: 0.07534810156, alpha: 1)
}
else if number.status == "offline"
{
cell.onlineStatusLbl.backgroundColor = #colorLiteral(red: 0.6666666865, green: 0.6666666865, blue: 0.6666666865, alpha: 1)
}
else
{
cell.onlineStatusLbl.backgroundColor = UIColor.clear
}
}
}
}
cell.selectionStyle = .none
cell.delegate = self
cell.myIndexPath = indexPath
cell.chatRoomObj = channelRoom
cell.onlineUser = onlineUserArray
cell.configCell()
return cell
}
Now when it meets the condition, if phone == number.phone
It does not change color for the cell label
I believe the problem is that you are looping through the entire array every time you get a request for a cell. What you probably want to do is get the number
for the indexPath.row
and loop through the onlineUserArray
to find the status.
Something like this (I don't know your exact data structure, but this should be along the right lines):
// inside cellForRowAt
cell = singleChatRoomsList.dequeueReusableCell(withIdentifier: "SingleRoomCellView") as! ChatRoomCellView
// just to make it easy to see what's going on in the debug console
print(indexPath)
let phone = numbers[indexPath.row]
for number in onlineUserArray
{
print(number)
if number.phone == phone
{
if number.status == 1
{
print("Matched")
cell.theLabel.backgroundColor = #colorLiteral(red: 0.08950354904, green: 0.807744801, blue: 0.07534810156, alpha: 1)
}
else if number.status == 0
{
cell.theLabel.backgroundColor = #colorLiteral(red: 0.6666666865, green: 0.6666666865, blue: 0.6666666865, alpha: 1)
}
else
{
cell.theLabel.backgroundColor = UIColor.clear
}
print("found a match, so break out of the loop")
break
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.