setNavigationBarWithBack(success: {
self.createGroup()
}
}, name: "CREATE GROUP", rightSideImage: "nextIcon")
Это мой внутренний номер для создания панели навигации с кнопкой возврата и правой кнопкой, если это необходимо. Если мне нужна правая кнопка, я могу дать имя изображению, и кнопка будет создана.
код:
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)
}
}
Проблема в том, что при использовании этого кода, когда я go вернуться к предыдущему контроллеру вида, и этот контроллер вида имеет правую кнопку и действие. и когда я нажимаю на него, выполняется действие последней кнопки правой кнопки контроллера представления (V C, с которого я только что вернулся), даже если я не нахожусь в этом контроллере представления, этот блок завершения вызывает его.
И один Еще одна вещь, на которую следует обратить внимание, это то, что Сэм использует общий контроллер представления для каждого контроллера представления, чтобы написать какой-то общий код, который применим.
Кто-нибудь знает, как это исправить?