2012-01-08 8 views
0

私は客観的なcを学び始めました.1つは私にとってはっきりしませんアクションを無効にしますか?

私はInterFace Builderでボタンを持っています。私は私のコードを持っています。

- (void)startButtonPressed:(id)sender; 

どのように私は、アクションを行うには、私のボタンに'void''link'ことができますか?

ここのコードは動作しません。どうすればいいですか?

- (void)startButtonPressed:(id)sender { 

//Some stuff in here 

    } 

誰でもこの問題を解決する方法は知っていますか?

- (IBAction)startButtonPressed:(id)sender; 

答えて

1

IBActionは、実際には、void

http://www.cocoadev.com/index.pl?IBAction

// from <AppKit/NSNibDeclarations.h> 
#ifndef IBAction 
    #define IBAction void 
#endif 

は、それがそのように与えられている、あなたが台無しUIとあなたのクラスの実装の機能から来る行動をしませんです。

UIとの接続機能を作成するには、インプリメンテーションでcoorectあるIBAction

// .h 
- (IBAction)startButtonPressed:(id)sender; 
// .m 
- (IBAction)startButtonPressed:(id)sender { 
    //Some stuff in here 
} 

だけでなく、

// .m 
- (void)startButtonPressed:(id)sender { 
    //Some stuff in here 
} 

型にそのタイプを設定する必要があり、void直接

することができ
+0

私はしました。 ' - (IBAction)startButtonPressed:(id)sender;'しかし、私はアクションにボタンを接続できませんか? Interface Builderで? – Blazer

+0

は、あなたがIBのアクションを見て、接続できない、あるいはそれを見ていないことを意味しますか? –

1

インタフェースビルダーはIBActionでタグ付けされた方法が必要です。だから、彼らは次のようになります。

// .h header file 
- (IBAction)startButtonPressed:(id)sender; 

// .m implementation file 
- (void)startButtonPressed:(id)sender { /* do some work */ } 

IBActionタイプはvoidとして、コンパイラとまったく同じです。これはInterface Builderによって使用され、ヘッダーファイルを解析して、それがリンクできるものを確認します。戻り値の型をIBActionに設定すると、アクションをこのメソッドの実装にリンクできることがインタフェースビルダーに伝えられます(これで、IBで接続を描画できるようになります)。

voidIBActionが同じであるため、実装タイプにIBActionを使用することもできますが、これは一般的ではありませんが、戻り値の型にも使用できます。また、IBActionvoidが同じであるため、値を返さないアクション(voidになる必要があります)を作成する必要があります。

+0

Interface Builderでは、インタフェースで実装するのではなく、 'IBAction'タグを付ける必要があります。 –

+0

@JasonCoco訂正していただきありがとうございます。私はたいていその両方にタグをつけます。タグ付けだけで '.h'だけで十分であることはわかりませんでした。 – dasblinkenlight

+0

Jason。 - それはもはや真実ではありません.... – bbum

2

変更IBAction代わりにvoidにヘッダーファイル(.Hファイル)内の戻り値:

関連する問題