2017-08-16 105 views
0

因爲我在通過故事板創建按鈕時遇到了問題,所以我開始通過代碼啓動正確的導航欄按鈕 - 通過此問題How can I go back to the initial view controller in Swift?找到。此代碼旨在讓我回到我的根視圖控制器。如何將操作添加到編程式按鈕?

所以這裏是目前的代碼。

let button1 = UIBarButtonItem(image: UIImage(named: "HomeM25.png"), style: .plain, target: self, action: #selector(getter: UIDynamicBehavior.action)) 
    self.navigationItem.rightBarButtonItem = button1 

    func button() { 
     self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
    } 

我的印象是,如果我改變

action: #selector(getter: action) 

我將能夠創建一個函數這個按鈕初始化像這樣

func action() { 
     self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
    } 

以下然而,我在聲明之前,我接受了「使用局部變量」行爲。「我不明白爲什麼這種解釋不會執行/爲什麼當它的唯一用途是一個函數名時,我將不得不建立操作變量?任何幫助,將不勝感激。

更新1:目前代碼

override func viewDidLoad() { 
    super.viewDidLoad() 

    let button1 = UIBarButtonItem(image: UIImage(named: "HomeM25.png"), style: .plain, target: self, action: #selector(action)) 
    self.navigationItem.rightBarButtonItem = button1 

    func action() { 
     self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
    } 

更新1:也不得不使用不同的功能作用回到原來的視圖控制器。

self.navigationController!.popToRootViewController(animated: true) 

回答

0

它應該是#selector(action)。你可以在一個函數中定義函數。移動以外的viewDidLoad函數。嘗試這個。

override func viewDidLoad() { 
    super.viewDidLoad() 
    let button1 = UIBarButtonItem(image: UIImage(named: "HomeM25.png"), style: .plain, target: self, action: #selector(action)) 
    self.navigationItem.rightBarButtonItem = button1 
} 


func action() { 
    self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
} 
+0

不幸的是,我仍然收到同樣的錯誤。 – jonpeter

+0

你應該在'viewDidLoad'函數或任何其他函數中執行此操作。發佈完整的代碼。 – Bilal