2017-01-07 12 views
-1

私はiOS開発でかなり新しく、アドバイスを探しています。メソッドを呼び出すボタンアクション

私はGitHubで1つのプロジェクトを見ています。

いくつかの機能を追加したいと思います。 SideMenuを表示し、おそらくそれを非表示にするボタンを追加したいと思います。

sideMenuはSideMenuクラスのインスタンスであり、ViewDidLoadメソッドで作成されます。ボタンのアクションメソッドを使用してsideMenu.toggleMenu(true)メソッドを呼び出す方法

class HomeViewController: UIViewController, SideMenuDelegate { 

    @IBAction func menuButtonTapped(_ sender: Any) { 

    sideMenu.toggleMenu(open: true) 

    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

    let sideMenu = SideMenu(menuWidth: 200 , menuItemTitles: ["", "", "Profile", "Settings", "Restaurant"], parentViewController: vviewController) 

     sideMenu.menuDelegate = self 

} 

私のボタンは、私はそれがviewDidLoadへのアクションメソッドで追加することはできません理由はストーリーボードを使用して作成されます。

理論上、私はViewDidLoadでボタンをプログラムで作成することができました。唯一の解決策ですか?

enter image description here

+0

私は理解していません、あなたのボタンにストーリーボードを使用しているのか、それともプログラムで作っていますか?あなたはそれがプログラム的であることを望んでいるようですが、なぜボタンのIBActionを持っていますか? –

+0

ストーリーボードを使用している場合。 Ctrlキーを押しながらドラッグして@IBActionをフックアップしましたか?あなたのmenuButtonでクイックプリントステートメントを作成します。クリックすると実行されるかどうかを確認します – Emptyless

+0

sideMenuはviewDidLoadのローカル定数で、IBActionからアクセスできないため、現時点ではあなたのコードはコンパイルされていませんか? –

答えて

1

問題は、あなたのボタンまたはどこでそれを宣言して行うものではありません。

sideMenuは、viewDidLoadの定数であり、IBActionにはアクセスできません。

は方法の sideMenu外のあなたの定義を移動し、それをオプションに

:あなたが現在(LETを除く)IBAction

sideMenu = SideMenu(... 

、アンラップされているよう

viewDidLoad
var sideMenu:SideMenu? 

はそれを設定しますオプション:それを使用する:

if let sideMenu = sideMenu { 
    // do what you need with sideMenu 
else { 
    // handle error sideMenu not initialised properly 
} 

代替案についてのvacawamaのコメントを参照してください。

+1

アンラップする必要はありません。 'sideMenu?.toggleMenu(open:true)'、 'sideMenu?.menuDelegate = self'など – vacawama

+0

@vacawama良い点ですが、これはsideViewがエラーを隠すことはありませんユニットを正しく取り付けます。答えを編集します。 –

+1

確かに、そのエラーは一度だけのプログラミングエラーであり、何度も繰り返し処理する必要はありません。実際には、 'var sideMenu:SideMenu! 'を作るのが実際には最善の方法かもしれません。なぜなら、あなたはそれを設定するのを忘れたことをすぐに知るからです。これは '@ IBOutlets'がどのように扱われるかです。 – vacawama

関連する問題