Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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 存储弹出视图控制器属性的导航栏_Ios_Swift_Navigation_Uibutton_Uinavigationitem - Fatal编程技术网

Ios 存储弹出视图控制器属性的导航栏

Ios 存储弹出视图控制器属性的导航栏,ios,swift,navigation,uibutton,uinavigationitem,Ios,Swift,Navigation,Uibutton,Uinavigationitem,这是我的分机呼叫,创建一个带有后退按钮和右键(如果需要)的导航栏。 如果我需要一个右侧按钮,我可以给一个图像名称和按钮将被创建 代码是 setNavigationBarWithBack(success: { self.createGroup() } }, name: "CREATE GROUP", rightSideImage: "nextIcon") 问题是,, 当我返回到上一个视图控制器并且该视图控制器有一个右侧按钮和操作时,使用此代码。 当我点击它

这是我的分机呼叫,创建一个带有后退按钮和右键(如果需要)的导航栏。 如果我需要一个右侧按钮,我可以给一个图像名称和按钮将被创建

代码是

 setNavigationBarWithBack(success: {

        self.createGroup()

        }
 }, name: "CREATE GROUP", rightSideImage: "nextIcon")
问题是,, 当我返回到上一个视图控制器并且该视图控制器有一个右侧按钮和操作时,使用此代码。 当我点击它时,最后一个视图控制器右键操作(我刚刚返回的VC)被执行,即使我不在该视图控制器中,这个完成块调用该视图控制器

这里要注意的另一件事是Sam对每个视图控制器使用一个公共视图控制器来编写一些适用的公共代码

有人知道如何解决这个问题吗

func setNavigationBarWithBack(success: @escaping (()->()), name:String, imageName:String = "backIcon", rightSideImage:String) {

        let leftBtnContainerView = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        let leftBtn = UIButton(frame: leftBtnContainerView.frame)
        let leftImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 9, height: 16))
        leftImageView.image = UIImage(named:imageName)
        leftImageView.center = leftBtnContainerView.center
        leftImageView.imageDirection = 1
        leftBtnContainerView.addSubview(leftImageView)
        leftBtnContainerView.addSubview(leftBtn)

        if rightSideImage.count > 0 {
        let rightSideView = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        let rightSideBtn = UIButton(frame: rightSideView.frame)
        let rightSideimageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        rightSideimageView.image = UIImage(named:rightSideImage)
        rightSideimageView.center = leftBtnContainerView.center
        rightSideimageView.imageDirection = 1
        rightSideView.addSubview(rightSideimageView)
        rightSideView.addSubview(rightSideBtn)

        rightSideBtn.actionHandle(controlEvents: UIControl.Event.touchUpInside,
        ForAction:{() -> Void in
            success()
        })

        let rightSideBarBtnControl = UIBarButtonItem(customView: rightSideView)
        self.navigationItem.rightBarButtonItems = [rightSideBarBtnControl]
        }

        leftBtn.addTarget(self, action: #selector(returnBack), for: UIControl.Event.touchUpInside)
        let back = UIBarButtonItem(customView: leftBtnContainerView)
        self.navigationItem.leftBarButtonItems = [back]
        self.navigationItem.title = name
        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white, NSAttributedString.Key.font:UIFont(name:"Poppins-Medium", size: 15)!]
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)

    }
}

extension UIButton {
    private func actionHandleBlock(action:(() -> Void)? = nil) {
        struct __ {
            static var action :(() -> Void)?
        }
        if action != nil {
            __.action = action
        } else {
            __.action?()
        }
    }

    @objc private func triggerActionHandleBlock() {
        self.actionHandleBlock()
    }

    func actionHandle(controlEvents control :UIControl.Event, ForAction action:@escaping () -> Void) {
        self.actionHandleBlock(action: action)
        self.addTarget(self, action: Selector(("triggerActionHandleBlock")), for: control)
    }
}