当我以编程方式交换按钮时,我无法使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)
}
答案 0 :(得分:0)
您缺少目标参数(我假设它是self
):
leftButton.addTarget(self, action: #selector(MapViewController.backToModules(sender:)), for: UIControlEvents.touchUpInside)
添加目标时,您必须指定selector
来确定要调用的方法的标识符 - 您设法做到了。但是,您还必须为其提供一个目标对象,一个应该调用该选择器的对象 - 以及您指定为nil
的对象。这意味着在nil
对象上调用了选择器。
在您的情况下,第一个目标参数必须是MapViewController
类型的对象,在该对象上将调用由选择器(backToModules(sender:)
)定义的方法。如果您在应该作为目标的addTarget
实例的上下文中调用该MapViewController
方法,请按照我的建议使用self
。