【发布时间】:2020-11-28 05:52:51
【问题描述】:
在FourthViewController 中,我有一个滑块,它的值范围从 1 到 1000。设置的值通过委托发送到 PatternViewController,它应该用来做某事(我把打印用于测试目的)。
我之前与代表合作过,一切正常,多次检查代码并在堆栈上找到多个答案,我似乎找不到问题。任何帮助将不胜感激
更新:我添加了一个按钮,以便更容易跟踪。事实证明,第一次按下按钮,什么都没有发生。但是如果我首先检查PatternViewController,然后我返回FourthViewController 并按下按钮,代表就会被触发。有人知道为什么会这样吗?
FourthViewController
import UIKit
class FourthViewController: UIViewController {
//MARK: Outlets
@IBOutlet var persistenceButton: UIButton!
@IBOutlet var persistenceSlider: UISlider!
@IBOutlet var persistenceLabel: UILabel!
weak var delegate: FourthViewControllerDelegate?
//MARK: Stored Properties - Constants
let userDefaults = UserDefaults.standard
let keyName = "sliderValue"
//MARK: Initializer
override func viewDidLoad() {
super.viewDidLoad()
loadSliderValue()
initialSetUp()
}
//MARK: Actions
@IBAction func handleValueChanged(_ sender: UISlider) {
updateLabel()
persistSliderValue(value: persistenceSlider.value, key: keyName)
}
//MARK: Methods
func updateLabel() {
persistenceLabel.text = String(format: "%.2f", persistenceSlider.value)
}
func persistSliderValue(value: Float, key: String) {
userDefaults.set(value, forKey: key)
}
func loadSliderValue() {
let persistedValue = userDefaults.float(forKey: keyName)
persistenceSlider.value = persistedValue
updateLabel()
}
}
func initialSetUp() {
persistenceButton.addTarget(self, action: #selector(handleButtonPressed), for: .touchUpInside)
}
@objc func handleButtonPressed() {
delegate?.valueChanged(value: persistenceSlider.value)
}
}
PatternViewController
import UIKit
class PatternViewController: UIViewController, FourthViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
setUp()
}
func setUp() {
if let tabBar = self.tabBarController, let viewController = tabBar.viewControllers, let fourthViewController = viewController[3] as? FourthViewController {
fourthViewController.delegate = self
}
}
func valueChanged(value: Float) {
print(value)
}
}
【问题讨论】:
标签: ios swift methods delegates uitabbarcontroller