2016-08-12 70 views
0

我有我的整个应用程序在我UINavigationController个自定义的返回按钮,看起来像这样:自定义后退按钮中的UINavigationController和雨燕2.2选择

Back Button

我有一个全局函数(随机斯威夫特文件;不是一类),我引用我到处都需要一个:

func customBackButton(controller: UIViewController){ 
    if !iPad(){ 
    controller.navigationItem.leftBarButtonItem = 
    UIBarButtonItem(image:UIImage(named: "back"), style:.Plain, target:controller, action:"goBack") 
    } 
} 

然后在我的控制器的viewDidLoad,我只需拨打:

override func viewDidLoad() { 
    //... 
    customBackButton(self) 
} 

action选择调用,我在使用了自定义后退按钮每个控制器定义了goBack功能:

func goBack(){ 
    //Because of the splitViewController, we have to reference the main nav controller 
    if let navController = splitViewController?.viewControllers[0] as? UINavigationController{ 
     navController.popViewControllerAnimated(true) 
    } 
} 

如果您在本实施摇头,我能够更好地敞开这样做的方法。 :)

现在到我的问题...

如何使用新雨燕2.2选择语法来引用goBack这样吗?

func customBackButton(controller: UIViewController){ 
    if !iPad(){ 
    controller.navigationItem.leftBarButtonItem = 
    UIBarButtonItem(image:UIImage(named: "back"), style:.Plain, target:controller, action:#selector(controller.goBack)) 
    } 
} 

这将引发一个错误,因为controllerUIViewController不包含goBack()功能,即使是获取传递的实际情况一样。

任何想法?

回答

1

我还没有试过,但它应该是工作,如果你在UIViewController

extension UIViewController { 
    func goBack(){ 
    //Because of the splitViewController, we have to reference the main nav controller 
    if let navController = splitViewController?.viewControllers[0] as? UINavigationController{ 
     navController.popViewControllerAnimated(true) 
    } 
    } 
} 

添加扩展你的函数当你把你的GoBack的功能,你应该随时随地存取您的GoBack的功能。

func customBackButton(controller: UIViewController){ 
    if !iPad(){ 
    controller.navigationItem.leftBarButtonItem = 
    UIBarButtonItem(image:UIImage(named: "back"), style:.Plain, target:controller, action:#selector(controller.goBack)) 
    } 
} 

让我知道它的作品。快乐编码...

+0

有道理。这工作。谢谢! –