Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIBarButtonim导致无法识别的选择器发送到实例_Ios_Swift - Fatal编程技术网

Ios UIBarButtonim导致无法识别的选择器发送到实例

Ios UIBarButtonim导致无法识别的选择器发送到实例,ios,swift,Ios,Swift,我想以编程方式在UIBarbuttonite上创建一个popover menù,这是我编写的代码 static func setNavigationRightButton(myView: UIViewController) { navBarBtn = UIButton(type: .custom) navBarBtn.addTarget(myView, action: #selector(pizza.handleFunc(_:)), for: .touchUpInsid

我想以编程方式在UIBarbuttonite上创建一个popover menù,这是我编写的代码

    static func setNavigationRightButton(myView: UIViewController) {

    navBarBtn = UIButton(type: .custom)
    navBarBtn.addTarget(myView, action: #selector(pizza.handleFunc(_:)), for: .touchUpInside)
    navBarBtn.frame = CGRect(x: 0, y: 0, width: 33, height: 30)
    navBarBtn.imageView?.contentMode = .scaleAspectFit
    //navBarBtn.setTitle("10", for: .normal)
    setCartBadge()
    navBarBtn.titleLabel?.font = UIFont.systemFont(ofSize: 9)

    let barButton = UIBarButtonItem(customView: navBarBtn)
    myView.navigationItem.rightBarButtonItem = barButton
}
这是动作函数

    func handleFunc(_ sender: UIBarButtonItem!) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "ShoppingCartPopoverVC") as! ShoppingCartPopoverVC
    vc.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 100)
    let navController = UINavigationController(rootViewController: vc)
    navController.modalPresentationStyle = .popover
    let popOver = navController.popoverPresentationController
    popOver?.delegate = self
    popOver?.barButtonItem = sender
    self.present(navController, animated: true, completion: nil)
}
当我在这里时“popOver?.barButtonItem=sender”应用程序会因此错误而崩溃

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIButton _viewForPresenting]:未识别的选择器已发送到实例0x7faa0b5148f0'


您的目标/操作被设置为
UIButton
,但您的操作方法为发送方指定了
UIBarButtonItem
,而不是
UIButton

您需要更新您的操作:

func handleFunc(_ sender: UIButton) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "ShoppingCartPopoverVC") as! ShoppingCartPopoverVC
    vc.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 100)
    let navController = UINavigationController(rootViewController: vc)
    navController.modalPresentationStyle = .popover
    let popOver = navController.popoverPresentationController
    popOver?.delegate = self
    popOver?.sourceView = sender
    popOver?.sourceRect = sender.bounds
    self.present(navController, animated: true, completion: nil)
}

请注意对参数和popover控制器上设置的属性所做的更改。

此处有
UIButton
navBarBtn=UIButton(type:.custom)
func-handleFunc(uuuu-sender:UIBarButtonItem!)
与崩溃无关。