Почему addTarget не вызывает функцию? - PullRequest
0 голосов
/ 12 апреля 2019

Я добавил модуль MTCircularSlider в свой проект.Мой viewController выглядит следующим образом:

class ViewController: UIViewController {

    @IBOutlet var slider: MTCircularSlider!

    @IBOutlet var sliderLabel: UILabel!

    let temperatureArray = ["7.5","8.0","8.5","9.0","9.5","10.0","10.5","11.0","11.5","12.0","12.5","13.0","13.5","14.0","14.5","15.0","15.5","16.0","16.5","17.0","17.5","18.0","18.5","19.0","19.5","20.0","20.5","21.0","21.5","22.0","22.5","23.0","23.5","24.0","24.5","25.0","25.5","26.0","26.5","27.0","27.5","28.0","28.5"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.slider.addTarget(self, action: #selector(valueChange), for: .valueChanged)

    }

    @objc func valueChange() {
        //Slider value change
        let value = Float(slider.value)
        let numberString = String(value)
        let numberComponent = numberString.components(separatedBy :".")
        let integerNumber = Int(numberComponent [0])!
        let fractionalString = numberComponent[1].prefix(1)

        var fractionalNumber:Int = Int(fractionalString)!

        if fractionalNumber >= 5 {
            fractionalNumber = 5
        }
        else {
            fractionalNumber = 0
        }

        let temperature = String(integerNumber) + "." + String(fractionalNumber)
        if temperature == "7.5" {
            sliderLabel.text = NSLocalizedString("min", comment: "")
        }
        else if temperature == "28.5" {
            sliderLabel.text = NSLocalizedString("max", comment: "")
        }
        else {
            sliderLabel.text = temperature + " °C"
        }

        if temperatureArray.contains(temperature) {
            let index = temperatureArray.firstIndex(of: temperature)

            print(index!)
        }
    }
}

Мой пользовательский интерфейс выглядит так:

enter image description here

Мой rootView выглядит так:

Я загружаю этот viewController на TabBar, используя следующий код:

class dashboardViewController: UIViewController {

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
switch item.tag {
        case 0:
            subTitleLabel.text = "Temperature"
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController                
            self.view.insertSubview(viewController.view!, belowSubview: self.dashboardTabBar)
}
}

Когда я загружаю viewController, обычно это означает, что при нажатии этого View он работает нормально.Но когда я добавляю на вкладку, то моя функция valueChange () не вызывается.Пожалуйста, дайте мне какое-нибудь решение, чтобы решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Попробуйте это

slider.addTarget(self, action: #selector(ViewController.handle(_:)), for: . valueChanged)

    // Handle Action

        @objc func handle(_ sender: AnyObject) {


    }
0 голосов
/ 12 апреля 2019

Как указано в GitHub - MTCircularSlider , метод ValueChange имеет один аргумент.Вероятно, аргумент отправителя.Пожалуйста, смотрите их код ниже.

self.slider?.addTarget(self, action: Selector("valueChange:"), forControlEvents: .ValueChanged)

Но в вашем коде, похоже, этого не хватает.Можете ли вы попробовать что-то вроде этого?

@objc
func valueChange(sender: AnyObject) {

}

Пожалуйста, дайте мне знать, это помогает.

...