Я новый программист, и у меня возникли некоторые проблемы с реализацией этого.У меня есть пара классов, настроенных в моей модели данных, например:
Я создаю свой объект здесь:
import Foundation
import UIKit
class PracticePads {
var padTitle: String
var padImage: UIImage
var soundPreset: Int
init(pad: UIImage, title: String, preset: Int ) {
self.padImage = pad
self.padTitle = title
self.soundPreset = preset
}
}
затем другой файл, в котором я создаю массив, подобный этому:
class PracticePadBank {
var list = [PracticePads]()
init(){
let pad1 = PracticePads(pad: #imageLiteral(resourceName: "Hard Neoprene Pad"), title: "Pad 1", preset: 0)
let pad2 = PracticePads(pad: #imageLiteral(resourceName: "Hard Neoprene Pad"), title: "Pad 2", preset: 0)
let pad3 = PracticePads(pad: #imageLiteral(resourceName: "Hard Neoprene Pad"), title: "Pad 3", preset: 0)
let pad4 = PracticePads(pad: #imageLiteral(resourceName: "Hard Neoprene Pad"), title: "Pad 4", preset: 0)
let pad5 = PracticePads(pad: #imageLiteral(resourceName: "Hard Neoprene Pad"), title: "Pad 5", preset: 0)
list.append(pad1)
list.append(pad2)
list.append(pad3)
list.append(pad4)
list.append(pad5)
}
}
В другом ViewController я настроил UITableView, который позволяет пользователю выбрать «тренировочную площадку», например:
class ChooseViewController: UIViewController {
var pads: [PracticePads] = []
let allPads = PracticePadBank()
var audioPlayer = AVAudioPlayer()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
pads = allPads.list
}
}
extension ChooseViewController: UITableViewDataSource, UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pads.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let pad = pads[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "PadCell") as! PadCell
cell.setPad(pad: pad)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self .performSegue(withIdentifier: "BlackToDetail", sender: nil)
}
}
Этот UITableView приведет пользователя к другому виртуальному каналу, где они могут выбратьразличные упражнения ... У меня пока есть кнопки UIB, настроенные на переход к еще одному VC, где метод заключается в том, что я хочу изменить параметр (предустановки) в зависимости от нажатой строки:
func loadSF2PresetIntoSampler(preset:UInt8) {
guard let bankURL = Bundle.main.url(forResource: "Pad Sounds", withExtension: "sf2") else {
print("could not load sound font")
return
}
do {
try sampler.loadSoundBankInstrument(at: bankURL, program: preset,bankMSB: UInt8(kAUSampler_DefaultMelodicBankMSB),bankLSB: UInt8(kAUSampler_DefaultBankLSB))
} catch {
print("error loading sound bank instrument")
}
}
ЯЯ не совсем уверен, как этого добиться.
Заранее благодарю миллион за любую помощь здесь! *
*** У меня есть еще один вопрос: все работает отлично, еслирассматриваемые контроллеры ViewController находятся рядом друг с другом в стеке, но мне нужно как-то передать данные через 3 других контроллера представления ... Я попытался использовать метод подготовки к Segue, как указано ниже вответ, но оператор print в ViewController, для которого я хочу вызвать метод, говорит, что ячейка равна нулю.Я не уверен, как я могу сохранить данные из первого ViewController (где я получаю ячейку) в ViewController, где я хочу получить доступ к индексу первой ячейки ViewController.Надеюсь, что это имеет смысл!Дайте мне знать, если я покажу свой обновленный код, чтобы проиллюстрировать это ... Спасибо!