【问题标题】:Why addTarget not calling function?为什么 addTarget 不调用函数?
【发布时间】:2019-09-02 19:59:06
【问题描述】:

我在我的项目中添加了 MTCircularSlider 吊舱。 我的视图控制器如下所示:

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

我的用户界面如下:

我的rootView如下:

我正在使用下面的代码在 TabBar 上加载这个 viewController:

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 通常意味着当推送此视图时它可以正常工作。但是当我在选项卡上单击时,我的函数 valueChange() 不会被调用。请给我任何解决方案。

【问题讨论】:

  • 您在哪里创建用户界面?是故事板还是xib?同时提供详细信息。这会对我们有所帮助。
  • 如何初始化和呈现视图控制器的实例?是通过代码还是你完全依赖故事板?
  • 您的视图控制器如何在设备(或模拟器)上显示其视图?您是自己实例化视图控制器还是通过 segues 实例化视图控制器?
  • 我更新了我的问题...我发现了问题,但没有找到任何解决方案。

标签: ios swift addtarget circular-slider


【解决方案1】:

试试这个

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

    // Handle Action

        @objc func handle(_ sender: AnyObject) {


    }

【讨论】:

  • 还有其他观点吗?检查该控件是否启用了用户交互
  • 其有线尝试与其他一些事件而不是值更改
  • 我更新了我的问题...我发现了问题,但没有找到任何解决方案。
  • MTCircularSlider 的根类是什么?添加更多信息,如 rootviewcontroller 制作地点代码和您当前的滑块 viewcontroller 代码
  • 您正在将一个视图控制器添加到另一个视图控制器中,因此它不会调用,因为其他控制器中的该方法...如果您想要调用方法,您需要使用容器视图
【解决方案2】:

正如GitHub - MTCircularSlider 参考中给出的,ValueChange 方法有一个参数。可能是发件人的论点。请在下面查看他们的代码。

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

但您的代码似乎缺少这一点。可以试试这样的吗?

@objc
func valueChange(sender: AnyObject) {

}

请让我知道这有帮助。

【讨论】:

  • 您确定 IBOutlet 已在 storyboard 中连接并且 self.slider 在 vi​​ewDidLoad 中不为空吗?请在调试器中检查。
  • 我更新了我的问题...我发现了问题,但没有找到任何解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-12-03
  • 2017-05-29
  • 2021-03-20
  • 2021-12-07
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多