Мое приложение содержит статическое представление коллекции внутри стандартного UIView.Мне нужно позволить элементам UIView общаться с элементами в UICollectionView.Проблема здесь заключается в том, что когда я рассматриваю предложенные методы для ссылки одного класса на другой, значение элемента пользовательского интерфейса возвращает ноль.Есть идеи, как это можно предотвратить?Ниже приведен пример.
class ViewController: UIViewController {
let cellIds = ["Purple Cell","Green Cell","Blue Cell","Red Cell"]
let cellSizes = Array(repeatElement(CGSize(width: 170, height: 80), count: 4))
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBOutlet weak var wowNiceOutlet: UILabel!
}
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet var myButton: UIButton!
@IBAction func myButtonPressed(_ sender: UIButton) {
myButton.setTitle("eat UICollectionView", for: .normal)
let theViewControl = ViewController()
**theViewControl.wowNiceOutlet.text = "wow nice"** //This line returns nil, causing an error.
}
}
Спасибо!Дайте мне знать, если у вас есть какие-либо вопросы!
Обновлен код в соответствии с Sh_Khan:
class ViewController: UIViewController {
let cellIds = ["Purple Cell","Green Cell","Blue Cell","Red Cell"]
let cellSizes = Array(repeatElement(CGSize(width: 170, height: 80), count: 4))
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
var thisString = "nice string"
//Theoretically thisString would be changed by a Stepper and upon doing that
//would be changing visual properties of the, in this case, label.
@IBOutlet weak var wowNiceOutlet: UILabel!
}
class MyCollectionViewCell: UICollectionViewCell {
weak var parentVC:ViewController?
@IBOutlet var greenLabel: UILabel!
@IBOutlet var myButton: UIButton!
@IBAction func myButtonPressed(_ sender: UIButton) {
myButton.setTitle("eat UICollectionView", for: .normal)
parentVC?.wowNiceOutlet.text = "wow nice"
}
}
extension ViewController: UICollectionViewDataSource {
func collectionView( _ collectionView: UICollectionView, numberOfItemsInSection
section: Int) -> Int {
return cellIds.count
}
func collectionView( _ collectionView: UICollectionView, cellForItemAt
indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
cellIds[indexPath.item], for: indexPath) as! MyCollectionViewCell // Get cell
cell.parentVC = self
cell.greenLabel.text = thisString
return collectionView.dequeueReusableCell( withReuseIdentifier:
cellIds[indexPath.item], for: indexPath)
}
}
extension ViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath:
IndexPath) -> CGSize {
return cellSizes[indexPath.item]
}
}
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt
indexPath: IndexPath) {
print(cellIds[indexPath.row]);
}
}