2011-06-20 12 views
2

注:これはシミュレータでのみテストしました。UIBarButtonItemをタップしたときにアクションが呼び出されない

ターゲットアクションをInterface BuilderでIBActionとして接続する代わりに、コードに追加したいとします。

theButtonは、IBで作成された左上のナビゲーションバーにあります。

ステップ:

  1. がIBOutletとしてtheButton宣言および1Bにそれを接続します。

  2. 追加このviewDidLoadで:

    self.theButton.target = self; 
    self.theButton.action = @selector(theAction); 
    
  3. 私はこれでtheActionをテストしている:私はシミュレータでtheButtonをクリックすると

    - (void)theAction { 
    NSLog(@"theAction called"); 
    //do some other stuff 
    } 
    

、何も起こりません。私はNSLogステートメントを全く見ません。

私には何が欠けていますか?

答えて

0

私の設定と関係がありました。私は複数のタブに同じビューコントローラを使用するタブバーコントローラを使用しています。各ビューコントローラーは、いくつかのタブ項目に対して異なるフィルタリングされたデータを表示します。

したがって、このような構成では、タブバー項目に含まれるビューコントローラごとにIBOutletを必ず接続する必要があります。私は1つしか接続していないので、タブ項目の一部では機能しませんでした。

4

interface-builderのボタンにアクションを接続しましたか?

あなたの.mファイルにアクション

-(IBAction)theAction{ 

} 

の名前を変更

-(IBAction)theAction; 

あなたの.hファイルでアクションを宣言する必要がありません場合はfinealyでボタンにアクションを接続しますインタフェースビルダー。

-(IBAction)theAction{ 
    NSLog(@"theAction called"); 
    //do some other stuff 
} 

をそして、あなたは次のように呼び出された場合、 "@selector(theAction :);":

+0

これは、self.theButton.target = selfを使ってプログラムで実行されるため、その必要はありません。 self.theButton.action = @セレクタ(theAction); – Russian

+0

プログラムによる使用のために私の答えを編集しました。 – shannoga

+0

* UIBarButtonItem *は* addTarget:action:forControlEvents:*メソッド – EmptyStack

3
は、以下のようにあなたの関数を変更

は、以下のように機能を変更します。

-(IBAction)theAction:(id)sender{ 
    NSLog(@"theAction called"); 
    //do some other stuff 
} 

は、それはあなたに役立つことを願っています。

問題が発生した場合はお知らせください。

関連する問題