Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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 仅设置一次导航后退按钮(leftBarButtonItem)_Ios_Swift_Uinavigationcontroller_Uinavigationbar - Fatal编程技术网

Ios 仅设置一次导航后退按钮(leftBarButtonItem)

Ios 仅设置一次导航后退按钮(leftBarButtonItem),ios,swift,uinavigationcontroller,uinavigationbar,Ios,Swift,Uinavigationcontroller,Uinavigationbar,我试图在几乎每个页面中设置一个自定义的后退按钮,并在每个页面中重复相同的代码,如下所示 let buttonItem = UIBarButtonItem(image: UIImage(named: "arrow_back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack") buttonItem.tintColor=UIColor.blackColor() navigationItem.leftBarButto

我试图在几乎每个页面中设置一个自定义的后退按钮,并在每个页面中重复相同的代码,如下所示

let buttonItem = UIBarButtonItem(image: UIImage(named: "arrow_back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
buttonItem.tintColor=UIColor.blackColor()
navigationItem.leftBarButtonItem = backButtonItem()

我认为这是错误的方式。那么,您能告诉我什么是最好的方法吗?

我通过在UIViewController上创建一个类别来实现这一点。在该文件中,我创建了一个名为addBackButton的方法,您可以将代码放入其中一次,然后在.h文件中公开该方法。然后,在任何视图控制器子类中,都可以导入类别并调用[self-addBackButton]

我通过在UIViewController上创建一个类别来实现这一点。在该文件中,我创建了一个名为addBackButton的方法,您可以将代码放入其中一次,然后在.h文件中公开该方法。然后,在任何视图控制器子类中,都可以导入类别并调用[self-addBackButton]

我建议您创建一个自定义UIButton类,并在每次需要时重用它

class backButtonItem: UIBarButtonItem {

convenience init(target: AnyObject?) {
    self.init(image: UIImage(named: "arrow_back"), style: .Plain, target: target, action: "popBack")
    self.tintColor = UIColor.blackColor()
}}
使用时只需键入以下脚本:

navigationItem.leftBarButtonItem = backButtonItem(target: self)

我建议您创建一个自定义UIButton类,并在每次需要时重用它

class backButtonItem: UIBarButtonItem {

convenience init(target: AnyObject?) {
    self.init(image: UIImage(named: "arrow_back"), style: .Plain, target: target, action: "popBack")
    self.tintColor = UIColor.blackColor()
}}
使用时只需键入以下脚本:

navigationItem.leftBarButtonItem = backButtonItem(target: self)

这里有多种选择

1)UIViewController扩展

extension UIViewController {

    func brandedBackButton() {

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
    }
}
然后只需调用视图控制器

override func viewDidLoad() {
    super.viewDidLoad()

    brandedBackButton()
}
2)基本视图控制器类

您基本上会在控制器和UIViewController之间放置一个类

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
     }
}
class YourWhateverViewController: BaseViewController {

//implementation here....
然后您将继承此BaseViewController,而不是标准UIViewController

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
     }
}
class YourWhateverViewController: BaseViewController {

//implementation here....
}


category和基类也可以容纳popBack自定义方法,因此您最终将真正拥有10个字符,从而在任何地方都可以获得这种行为…

您在这里有各种选择

1)UIViewController扩展

extension UIViewController {

    func brandedBackButton() {

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
    }
}
然后只需调用视图控制器

override func viewDidLoad() {
    super.viewDidLoad()

    brandedBackButton()
}
2)基本视图控制器类

您基本上会在控制器和UIViewController之间放置一个类

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
     }
}
class YourWhateverViewController: BaseViewController {

//implementation here....
然后您将继承此BaseViewController,而不是标准UIViewController

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
     }
}
class YourWhateverViewController: BaseViewController {

//implementation here....
}


category和基类都可以容纳popBack自定义方法,因此您最终可以在任何地方使用10个字符来实现此行为…

通过文件->新建->文件->创建一个类别,然后在iOS Source下选择Objective-C文件并点击Next,然后在“文件类型”中选择“类别”,对于“类别”,选择“UIViewController”通过进入“文件->新建->文件->创建类别,然后在“iOS源”下选择“目标-C文件”并点击“下一步”,然后在“文件类型”中选择“类别”,对于“类别”,选择“UIViewController”