【发布时间】:2019-08-17 21:55:25
【问题描述】:
我有一个 NowPlayingVC,作为我的 MainVC(集合视图)的子级,我想在第三个视图控制器(SingleSoundVC)被解雇时更改 NowPlayingVC 内的 textValue。 我通过代码做所有事情,我不明白为什么我的标签在解雇后仍然不可见。 如果我尝试硬编码,它们工作得很好,但永远不会改变。
当第三个视图被关闭但标签为空时,我可以正确打印,即使我可以在调试视图层次结构中看到它。
我尝试过这样的协议/委托:
协议
protocol SendDataToAudioPlayerContainer {
func receiveData(data:Sound){
self.audioNameLabel.text = data.name
}
}
NowPlayingVC
NowPlayingVC: SendDataToAudioPlayerContainer
var audioNameLabel:UILabel = {
var lbl = UILabel()
lbl.numberOfLines = 0
lbl.textAlignment = .left
lbl.sizeToFit()
lbl.textColor = .black
return lbl
}
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
setupConstraints()
}
func setupViews() {
self.view.backgroundColor = .blue
self.view.addSubview(audioNameLabel)
}
func setupConstraints(){ //setup of constraints with SnapKit}
}
SingleSoundVC
var delegate:SendDataToAudioPlayerContainer?
var singleSound: Sound?
@objc func dismissView(){
if self.delegate != nil {
print("data passed up")
let data = self.singleSound
delegate?.receiveData(data: data!)
self.dismiss(animated: true, completion: nil)
} else {self.dismiss(animated: true, completion: nil)
print("data is not passed")}
}
我还必须补充一点,当我选择添加 NowPlaying 作为 MainVC 代表的项目时
MainVC - 集合视图
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = MainVC()
let childVC = NowPlayingVC()
vc.delegate = childVC
ApiService.sharedInstance.downloadAudioFile(with: vc.singleSound!.audioId)
vc.modalPresentationStyle = .popover
present(vc, animated: true, completion: nil)
}
【问题讨论】:
-
上传你的代码到 Github 帮助你变得更好
-
为什么要设置
vc.delegate = childVC?您应该将SingleSoundVC委托设置为NowPlayingVC
标签: ios swift uicollectionview delegates