addTarget无法正常工作

时间:2018-03-11 20:28:54

标签: ios swift

当我以编程方式交换按钮时,我无法使addTarget正常工作

        let leftButton: UIButton = UIButton(type: UIButtonType.custom)
        leftButton.setImage(UIImage(named: "menu"), for: UIControlState.normal)
        leftButton.frame = CGRect(x: 0, y: 0, width: 24, height: 24)
        ...
        leftButton.addTarget(nil, action: #selector(MapViewController.backToModules(sender:)), for: UIControlEvents.touchUpInside)
        ...
        let leftBarButton = UIBarButtonItem(customView: leftButton)
        let rightBarButton = UIBarButtonItem(customView: rightButton)
        //assign button to navigationbar
        self.navigationItem.rightBarButtonItems = [rightBarButton]
        self.navigationItem.leftBarButtonItem = leftBarButton 

我的目标应该调用以下函数,但它没有?

func backToModules(sender: AnyObject) {
        self.dismiss(animated: true, completion: nil)
    }

1 个答案:

答案 0 :(得分:0)

您缺少目标参数(我假设它是self):

leftButton.addTarget(self, action: #selector(MapViewController.backToModules(sender:)), for: UIControlEvents.touchUpInside)

添加目标时,您必须指定selector来确定要调用的方法的标识符 - 您设法做到了。但是,您还必须为其提供一个目标对象,一个应该调用该选择器的对象 - 以及您指定为nil的对象。这意味着在nil对象上调用了选择器。

在您的情况下,第一个目标参数必须是MapViewController类型的对象,在该对象上将调用由选择器(backToModules(sender:))定义的方法。如果您在应该作为目标的addTarget实例的上下文中调用该MapViewController方法,请按照我的建议使用self