Как передать данные из одного ViewController в другой ViewController?
Задумка в том чтобы перейти во второй вью контроллер, выбрать песню, нажать ok кнопку, вернуться назад, нажать play кнопку и чтобы начала играть песня которую мы выбрали.
``` //1
protocol ViewControllerDelegate: AnyObject {
func update(trNew: String)
}
class ViewController: UIViewController {
let allTreckArray = ["Я не улыбаюсь", "Веселей", "Вечеринка", "Мистер 718", "Притон", "Кэс", "В одного", "Маленькие ублюдки", "Какие новости", "Andrew Story", "Bandana", "5 Nights Crazy", "Slip & Slide", "Bon Voyage", "Errbody Sleeping", "Ladidadida", "Mama Makusa", "Million", "Ride Or Die"]
var treck = ""
var player = AVAudioPlayer()
let playButton = UIButton()
let pauseButton = UIButton()
let secondVC = UIButton()
//5
var VC2 = SecondVC()
override func viewDidLoad() {
super.viewDidLoad()
//6
VC2.delegate = self
title = "Music"
//MARK: - playButton
playButton.frame = CGRect(x: 130, y: 650, width: 80, height: 80)
playButton.setTitle("▶️", for: .normal)
playButton.setTitleColor(.black, for: .normal)
playButton.backgroundColor = .systemGray3
playButton.layer.cornerRadius = 40
playButton.addTarget(self, action: #selector(myPlayButton(param:)), for: .touchUpInside)
self.view.addSubview(playButton)
//MARK: - pauseButton
pauseButton.frame = CGRect(x: 130, y: 650, width: 80, height: 80)
pauseButton.setTitle("⏸", for: .normal)
pauseButton.setTitleColor(.black, for: .normal)
pauseButton.backgroundColor = .systemGray3
pauseButton.layer.cornerRadius = 40
pauseButton.isHidden = true
pauseButton.addTarget(self, action: #selector(myPauseButton(param:)), for: .touchUpInside)
pauseButton.isHidden = true
self.view.addSubview(pauseButton)
//MARK: - secondVC
secondVC.backgroundColor = .gray
secondVC.setTitle("Treck list >", for: .normal)
secondVC.setTitleColor(.systemBlue, for: .normal)
secondVC.addTarget(self, action: #selector(mySecondVC(param:)), for: .touchUpInside)
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: secondVC)
}
//MARK: - mySecondVC
@objc func mySecondVC(param: UIButton) {
let displeyTwo = SecondVC()
dismiss(animated: true)
navigationController?.pushViewController(displeyTwo, animated: true)
}
//MARK: - playButton
@objc func myPlayButton(param: UIButton) {
pauseButton.isHidden = false
playButton.isHidden = true
do {
if let audiopatch = Bundle.main.path(forResource: treck, ofType: "mp3") {
try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audiopatch))
player.play()
}
} catch {
print("Errors this treck not found")
}
}
//MARK: - pauseButton
@objc func myPauseButton(param: UIButton) {
playButton.isHidden = false
pauseButton.isHidden = true
player.pause()
}
}
//2
extension ViewController: ViewControllerDelegate {
func update(trNew: String) {
treck = trNew
}
} ```
class SecondVC: UIViewController {
var treckNew = ""
let okButton = UIButton()
let allTreckButton = UIButton()
let allTreckPicker = UIPickerView()
let allTreckArray = ["Я не улыбаюсь", "Веселей", "Вечеринка", "Мистер 718", "Притон", "Кэс", "В одного", "Маленькие ублюдки", "Какие новости", "Andrew Story", "Bandana", "5 Nights Crazy", "Slip & Slide", "Bon Voyage", "Errbody Sleeping", "Ladidadida", "Mama Makusa", "Million", "Ride Or Die"]
//3
weak var delegate: ViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
//MARK: - okButton
okButton.frame = CGRect(x: 57, y: 621, width: 300, height: 60)
okButton.setTitle("Ok", for: .normal)
okButton.setTitleColor(.red, for: .normal)
okButton.backgroundColor = .systemGray3
okButton.layer.cornerRadius = 30
okButton.addTarget(self, action: #selector(okButtonFunc(param:)), for: .touchUpInside)
okButton.isHidden = true
self.view.addSubview(okButton)
//MARK: - allTreckButton
allTreckButton.frame = CGRect(x: 57, y: 299, width: 300, height: 330)
allTreckButton.addTarget(self, action: #selector(myButton(param:)), for: .touchUpInside)
self.view.addSubview(allTreckButton)
//MARK: allTreckPicker
allTreckPicker.frame = CGRect(x: 0, y: 0, width: 320, height: 216)
allTreckPicker.center = view.center
allTreckPicker.delegate = self
allTreckPicker.dataSource = self
allTreckPicker.tintColor = .black
allTreckPicker.isHidden = true
self.view.addSubview(allTreckPicker)
//MARK: - okButtonFunc
@objc func okButtonFunc(param: UIButton) {
treckNew = self.allTreckArray[self.allTreckPicker.selectedRow(inComponent: 0)]
//4
delegate?.update(trNew: treckNew)
}
}
//MARK: - Extension
extension SecondVC: UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return allTreckArray.count
}
}
extension SecondVC: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return allTreckArray[row]
}
}