[英]UIBarbuttonItem dismiss UIVIewcontroller
我添加了一个UIViewController的扩展来添加一个关闭按钮
extension UIViewController {
func addCloseButton() {
let button = UIBarButtonItem(image: #imageLiteral(resourceName: "bar_close"),
landscapeImagePhone: nil,
style: .done,
target: self,
action: #selector(UIViewController.dismiss(animated:completion:)))
navigationItem.leftBarButtonItem = button
}
}
当我点击按钮时,我直接崩溃到AppDelegate。 任何提示? 似乎与选择器有关。
你不能在这里使用dismiss(animated:completion :)作为选择器,因为它需要两个参数bool和closure以及bar按钮动作传递args作为UIBarButtonItem导致应用程序崩溃。 所以改变你的代码就像这样。
extension UIViewController {
func addCloseButton() {
let button = UIBarButtonItem(image: #imageLiteral(resourceName: "rightgreen"),
landscapeImagePhone: nil,
style: .done,
target: self,
action: #selector(onClose))
navigationItem.leftBarButtonItem = button
}
@objc func onClose(){
self.dismiss(animated: true, completion: nil)
}
}
然而,这个问题已经接受了在每个addCloseButton
中加载额外一个方法addCloseButton
的答案仍然发布答案将帮助某人
注意:此示例用于自动添加barbutton项目并处理pop视图控制器的操作。
由于协议扩展不提供实现选择器方法,所以为了摆脱它,我已经创建了这个解决方案。
你需要的第一件事是BaseVC
,它是UIViewController
子类,你的所有视图控制器都将由BaseVC
继承,就像您的class LoginVC:BaseVC
...
现在声明协议
protocol PopableClass {
func popSelf (animated:Bool)
}
extension PopableClass where Self : UIViewController {
func popSelf (animated:Bool) {
self.navigationController?.popViewController(animated: animated)
}
}
在Base VC中添加两个方法并从viewDidLoad
调用setupNavigationBar
func setupNavigationBar () {
if self is PopableClass {
let barbuttonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "back"), landscapeImagePhone: #imageLiteral(resourceName: "back"), style: .plain, target: self, action: #selector(popViewController))
self.navigationItem.leftBarButtonItem = barbuttonItem
}
}
//--------------------------------------------------------------------------------
@objc func popViewController () {
if self is PopableClass {
(self as! PopableClass).popSelf(animated: true)
}
}
你做到了 !!
现在在任何类别你需要后退按钮弹出视图控制器就像这样使用
class PushedClass: BaseVC,PopableClass
希望它有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.