У меня есть этот небольшой фрагмент кода в функции источника данных табличного представления func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
:
cell.textLabel?.text = "\(playerSorted[indexRow.path].username): \(playerSorted[indexRow.path].kills)"
, в котором .username - это строка, а .kills - это int. По какой-то причине в ярлыке может отображаться только имя пользователя. Я пробовал использовать убийства как строку, я пробовал использовать конкатенацию:
cell.textLabel?.text = playerSorted[indexRow.path].username + ": " + String(playerSorted[indexRow.path].kills
, но после .username ничего не отображается, даже двоеточие. Я пробовал помещать вещи перед .username, и по какой-то причине они появляются, например:
cell.textLabel?.text = "Player \(playerSorted[indexRow.path].username): \(playerSorted[indexRow.path].kills)"
или
cell.textLabel?.text = "Player " + playerSorted[indexRow.path].username + ": " + String(playerSorted[indexRow.path].kills
В этих случаях "Player" и .username отображается в метке на экране. Любой совет, который поможет с этой проблемой, был бы замечательным, я какое-то время застрял на нем. Спасибо за ваше время.
Полный класс collectionViewCell:
import UIKit
class CollectionViewCellRankings: UICollectionViewCell {
@IBOutlet weak var tableViewInGame: UITableView!
var teamsSorted = [Team]()
var playersInYourTeam = [Player]()
var playersSorted = [Player]()
var cellNumber = 0
override func awakeFromNib() {
super.awakeFromNib()
}
}
extension CollectionViewCellRankings: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch cellNumber {
case 0:
return playersSorted.count
case 1:
return teamsSorted.count
case 2:
print("creating second cell")
return playersInYourTeam.count
default:
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "RankingCellTV")!
cell.backgroundColor = UIColor.systemGray2
switch cellNumber {
case 0://FFA
print("Kills:")
print(playersSorted[indexPath.row].kills)
//Line that is causing the problems
cell.textLabel?.text = "\(playersSorted[indexPath.row].username): \(playersSorted[indexPath.row].kills)"
case 1://Team rankings
if Game.teamSetting > 0 {
//This line of interpolation actually works! (no idea why)
cell.textLabel?.text = "Team \(String(teamsSorted[indexPath.row].team!)): \(String(teamsSorted[indexPath.row].score!))"
switch teamsSorted[indexPath.row].team {
case 1:
cell.backgroundColor = UIColor.red
case 2:
cell.backgroundColor = UIColor.blue
case 3:
cell.backgroundColor = UIColor.green
case 4:
cell.backgroundColor = UIColor.purple
case 5:
cell.backgroundColor = UIColor.orange
case 6:
cell.backgroundColor = UIColor.cyan
case 7:
cell.backgroundColor = UIColor.yellow
case 8:
cell.backgroundColor = UIColor.magenta
default:
cell.backgroundColor = UIColor.systemBlue
}
}
case 2://Players in team
print("printing team player")
cell.textLabel?.text = "\(playersInYourTeam[indexPath.row].username) | K: \(playersInYourTeam[indexPath.row].kills) D: \(playersInYourTeam[indexPath.row].deaths)"
default:
break
}
return cell
}
}
Делегат представления коллекции класса UIViewController и методы источника данных:
extension InGameVC: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if Game.teamSetting > 0 {
return 2
} else {
return 1
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = inGameCV.dequeueReusableCell(withReuseIdentifier: "RankingCell", for: indexPath) as! CollectionViewCellRankings
cell.backgroundColor = UIColor.systemGray2
if indexPath.row == 0 {
cell.tableViewInGame.backgroundColor = UIColor.systemGray2
if Game.teamSetting > 0 {
print(indexPath.row)
cell.cellNumber = indexPath.row + 1
cell.playersInYourTeam = playersInYourTeam
cell.teamsSorted = teamsSorted
} else {
cell.cellNumber = 0
cell.playersSorted = playersSorted
}
}
cell.tableViewInGame.delegate = cell
cell.tableViewInGame.dataSource = cell
// cell.tableViewInGame.separatorStyle = UITableViewCell.SeparatorStyle.none
cell.tableViewInGame.reloadData()
return cell
}
}
Player и Team являются структурами.