将 UISlider 值从一个 ViewController 传递到另一个

Passing UISlider values from one ViewController to another

我正在研究 AVSpeechSynthesizer,我正在尝试将滑块上设置的音量、音高和速率值从设置视图控制器传递到主视图控制器。 在设置视图控制器中,从默认值开始,

var volume : Float = 1.0
var pitch: Float = 1.0
var rate: Float = AVSpeechUtteranceDefaultSpeechRate

和滑块动作,

@IBAction func volumeSliderDidSlide(_ sender: UISlider) {
    volume = sender.value
    testLable.text = String(volume)
}

@IBAction func pitchSliderDidSlide(_ sender: UISlider) {
    pitch = sender.value
}

@IBAction func rateSliderDidSlide(_ sender: UISlider) {
    rate = sender.value
}

在主视图控制器中,

var ttsSettingsViewController: TTSSettingsViewController!

@IBOutlet weak var textBox: UITextView!
var speechSynthesizer = AVSpeechSynthesizer()
var speechUtterence : AVSpeechUtterance = AVSpeechUtterance(string: "")

override func viewDidLoad() {
    super.viewDidLoad()
    let storyBoard: UIStoryboard = UIStoryboard(name: "TTS", bundle: nil)
    ttsSettingsViewController = storyBoard.instantiateViewController(withIdentifier: "TTSSettingsViewController") as! TTSSettingsViewController
}
@IBAction func didTapSpeech(_ sender: Any) {
    if let textBoxText = textBox.text{
        speechUtterence = AVSpeechUtterance(string: textBoxText)
        speechUtterence.volume = ttsSettingsViewController.volume
        speechUtterence.pitchMultiplier = ttsSettingsViewController.pitch
        speechUtterence.rate = ttsSettingsViewController.rate
        speechSynthesizer.speak(speechUtterence)
    }
}

但只使用了音量、音调和速率的默认值,而不是通过更改在滑块上设置的值。

我写了一些代码与你的代码做同样的事情。

在SettingViewController中

class SettingViewController: UIViewController {

    var volume: Float = 0.0

    @IBAction func slider(_ sender: UISlider) {
        volume = sender.value
    }

    @IBAction func closeButton(_ sender: Any) {
        dismiss(animated: true)
    }
}

和ViewController.swift

class ViewController: UIViewController {

    var settingVC: SettingViewController!

    override func viewDidLoad() {
        super.viewDidLoad()
        settingVC = UIStoryboard(name: "Main", bundle: nil)
            .instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController
    }

    @IBAction func printSettingValue(_ sender: Any) {
        // Use setting view controller's value
        print(settingVC.volume)
    }

    @IBAction func showSettingView(_ sender: Any) {
        show(settingVC, sender: nil)
    }
}

所以,这是我的代码,效果很好。

我的 hypotheses.TTSSettingsViewController 中您使用的值可能与您更改过的值不同。