【问题标题】:Passing UISlider values from one ViewController to another将 UISlider 值从一个 ViewController 传递到另一个
【发布时间】:2018-09-02 13:36:03
【问题描述】:

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

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)
    }
}

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

【问题讨论】:

  • 这是一个非常常见的错误。 TTSSettingsViewController() 创建了一个全新的实例,它不是故事板中的实例,因此出口没有连接。
  • @vadian 感谢您的更正,删除了该行,这就是我实例化的方式: let storyBoard: UIStoryboard = UIStoryboard(name: "TTS", bundle: nil) ttsSettingsViewController = storyBoard.instantiateViewController(withIdentifier :“TTSSettingsViewController”)为! TTSSettingsViewController 但我仍然得到默认值。
  • 你如何展示你的 settingsController?您的代码实例化了一个控制器,但没有对它做任何事情,因此默认值...

标签: ios swift xcode uislider


【解决方案1】:

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

在设置视图控制器中

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)
    }
}

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

我的假设是。您使用的 TTSSettingsViewController 的值可能与您更改的值不同。

【讨论】:

  • 是的,我的值有问题,最初更改的值没有被使用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2014-10-04
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多