2017-08-16 23 views
0

私はストーリーボード経由でボタンを作成する際に問題が発生していたので、この質問How can I go back to the initial view controller in Swift?で見つかったコードを介して右のナビゲーションバーボタンを開始しました。このコードは私をルートビューコントローラに戻すことを意図しています。プログラムで作成されたボタンにアクションを追加するにはどうすればよいですか?

これは現時点でのコードです。私は、私は

action: #selector(getter: action) 

を変更した場合、私はそう

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

しかしように、このボタンの初期化以下の関数を作成することができるだろうという印象の下にIだっ

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) 
    } 

その宣言の前に "ローカル変数の使用"アクションで挨拶されました。 "私はなぜこの解釈が実行されないのか理解できません/なぜ唯一の使用が関数名であるときにアクション変数を設定しなければならないのでしょうか?どんな助けもありがとう。

アップデート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)である必要があります。関数内で関数を定義することもできます。移動actionviewDidLoad機能の外に移動します。これを試して。

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

関連する問題