2016-08-12 68 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

有道理。這工作。謝謝! –