Ste*_*ann 4 objective-c uiviewcontroller ios swift
我有一个关于取消从UIViewController中的后退按钮触发的后退事件的问题。在Objective-C中,进行了以下扩展。我真的不知道如何将其转换为快速。我到目前为止试图用自己的函数覆盖backBarButton,但是它不起作用:
navigation.backBarButtonItem?.action = #selector(MyController.back)
navigation.backBarButtonItem?.target = self
Run Code Online (Sandbox Code Playgroud)
我搜索了类似委托函数的内容,但是找不到backButton的任何内容。
当我遇到这个问题时,我将此扩展重写为 Swift 3
此解决方案使系统后退按钮带有“<”
public protocol VCWithBackButtonHandler {
func shouldPopOnBackButton() -> Bool
}
extension UINavigationController: UINavigationBarDelegate {
public func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool {
if viewControllers.count < (navigationBar.items?.count) ?? 0 {
return true
}
var shouldPop = true
let vc = self.topViewController
if let vc = vc as? VCWithBackButtonHandler {
shouldPop = vc.shouldPopOnBackButton()
}
if shouldPop {
DispatchQueue.main.async {[weak self] in
_ = self?.popViewController(animated: true)
}
} else {
for subView in navigationBar.subviews {
if(0 < subView.alpha && subView.alpha < 1) {
UIView.animate(withDuration: 0.25, animations: {
subView.alpha = 1
})
}
}
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
class ViewController: UIViewController,VCWithBackButtonHandler{
public func shouldPopOnBackButton() -> Bool {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
您需要backBarButtonItem
使用navigationItem的覆盖leftBarButtonItem
。这将替换导航栏中的后退按钮,您可以指定要调用的自定义选择器:
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(self.backAction(sender:)))
func backAction(sender: AnyObject) {
//Your Code
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2375 次 |
最近记录: |