В качестве технической оценки работы, за которую я беру интервью, я делаю основную игру для поиска слов, где пользователь ищет переводы данного слова на данном языке.У меня достаточно опыта работы с iOS, но я никогда раньше не создавал динамически генерируемые представления с текстовыми метками во время выполнения и т. Д.
Чтобы было ясно, я знаю, что это работаоценки, но независимо от того, получу ли я работу или смогу ли я закончить оценку вовремя, я думаю, что это интересная проблема, и я хотел бы узнать, как это сделать, поэтому я закончуэто как приложение для запуска в симуляторе или на моем собственном телефоне.
Итак.У меня есть представление, встроенное в / контролируемое UINavigationController.У меня есть пара информационных меток вверху, набор кнопок для выполнения действий в нижней части вида, а в основной области просмотра должна быть двумерная сетка символов.Я хотел бы иметь возможность предпринимать действия при касании символа, например выделять символ, если он является частью действительного слова.Мне бы хотелось иметь возможность поддерживать сетки разных размеров, поэтому я не могу просто создать ограниченную сеткой меток или кнопок в Интерфейсном Разработчике с ограничением по разметке.
Я пробовал различные способы отображения 2Dсетка символов, но та, которая, как мне показалось, имела наибольшее обещание, была следующей:
Используйте UITableView для представления строк символов.Внутри каждой ячейки табличного представления используйте UIStackView с динамически генерируемой коллекцией UILabels.
Чтобы заполнить мой UITableView, у меня есть следующее:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = gameGrid.dequeueReusableCell(withIdentifier: "GameGridCell") as! TWSGameGridCell
if indexPath.row < word.grid.count {
cell.characters = word.grid[indexPath.row]
cell.configureCell()
return cell
}
return cell
}
Функция в пользовательском классе ячейки таблицыкоторая настраивает ячейку (в идеале для создания и отображения строки символов):
func configureCell()
{
self.stackView = UIStackView(arrangedSubviews: [UILabel]())
self.stackView.backgroundColor = (UIApplication.shared.delegate as! TWSAppDelegate).appBackgroundColor()
self.stackView.distribution = .fillEqually
let myRect = self.frame
self.stackView.frame = myRect
let characterGridWidth = myRect.width / CGFloat(characters.count)
for cIndex in 0..<characters.count {
let labelRect = CGRect(x: myRect.origin.x + (CGFloat(cIndex) * characterGridWidth), y: myRect.origin.y, width: CGFloat(characterGridWidth), height: myRect.height)
let currentLabel = UILabel(frame: labelRect)
currentLabel.backgroundColor = (UIApplication.shared.delegate as! TWSAppDelegate).appBackgroundColor()
currentLabel.textColor = (UIApplication.shared.delegate as! TWSAppDelegate).appTextColor()
currentLabel.font = UIFont(name: "Palatino", size: 24)
currentLabel.text = characters[cIndex]
self.stackView.addArrangedSubview(currentLabel)
}
}
Я предполагаю, что у нее возникают проблемы, поскольку у меток нет видимого прямоугольника при их создании, поэтомуони нигде не отображаются.
Результирующее представление при запуске в симуляторе представляет собой белое поле, покрывающее столько строк табличного представления, сколько должно быть заполнено строками символов, а остальная часть табличного представления показываетс пользовательским цветом фона, который я использую), согласно этому изображению:
Я пытаюсь, чтобы этот белый прямоугольник имел такой же цвет фона, как и все остальное, и был бы заполнен рядами символов,Чего мне не хватает?