В настоящее время я создаю приложение iOS, которое в одном из его представлений содержит UICollectionView внутри каждой строки UITableView, так что пользователь может прокручивать все представление вниз, но также может прокручивать каждую отдельную строку вправо . Например, она выглядит точно так же, как домашняя страница Spotify. Целью приложения также является воспроизведение звуковых файлов; когда вы щелкаете по одной из этих ячеек коллекции, воспроизводится звук.
Для этого я создал собственный класс UITableViewCell. UIViewController, который управляет этим представлением, ссылается на этот класс с помощью IBOutlet на UITableView, который содержит эти настраиваемые ячейки представления таблицы, а настраиваемый класс UITableViewCell ссылается на UICollectionView внутри него с помощью IBOutlet для этого UICollectionView. Затем у меня есть еще один настраиваемый класс для этих UICollectionViewCells, который имеет смысл использовать только внутри моего настраиваемого класса UITableViewCell.
Проблема в том, что я хочу знать глобально, воспроизводятся ли какие-либо звуки. Однако каждый экземпляр настраиваемого класса UITableViewCell создает свой собственный экземпляр модели, в которой существует свойство isAnythingPlaying, поэтому доступ к этому свойству сообщает мне, только если воспроизводятся какие-либо звуковые файлы внутри текущего UITableViewCell. Для ясности:
class Model {
// (other properties would normally be here)
var isAnythingPlaying: Bool = false
// (other functions would normally be here)
func getIsAnythingPlaying() {
/*
The problem with this method is that it will update a property (isAnythingPlaying)
that needs to contain the same value no matter which cell of the table view
(CustomTableViewCell) is accessing it.
This is just pseudocode for the real method, which works as intended.
*/
if (somethingIsPlaying) {
isAnythingPlaying = true
}
else {
isAnythingPlaying = false
}
}
}
Тогда мой класс CustomTableViewCell выглядит так:
class CustomTableViewCell: UITableViewCell! {
@IBOutlet weak var collectionView: UICollectionView!
var customModel = Model!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
collectionView.delegate = self
collectionView.dataSource = self
customModel = Model()
// (other functions would normally be here)
}
}
extension CustomTableViewCell: UICollectionViewDelegate,
UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
***************************************************************
// at this point the value model.isAnythingPlaying will expectedly be different
// for each instance of the UITableViewCell. If anything is playing within that
// particular cell (row), it will be true; otherwise, false.
***************************************************************
}
Могу ли я что-то сделать, чтобы разрешить всем объектам CustomTableViewCell доступ к той же переменной isAnythingPlaying? Я подумал о том, чтобы поместить его в текстовый файл в комплекте и заставить код переключить текстовый файл с «истинного» на «ложное», но это казалось слишком смешным, чтобы на самом деле пытаться.