0

重複
の可能性: 目的 C: 「(id) 送信者」とは?

次の点について質問があります。

- (IBAction)leftButtonPressed:(id)sender 
{
     UIButton *button = (UIButton*)sender;
     _label.text = button.titleLabel.text;
}

正確には何をし(UIButton)*senderますか?特に (UIButton*) を * で意味します。に似たものUIButton *myButtonですか?

私が理解している限り、それは押されたボタンへのある種のポインターですが、それはなぜですか? そして、なぜ私はただ書くことができなかったのですか

_label.text = sender.titleLabel.text;

それは「ボタン」だからですか?とにかく送信できるものをどうやって知るのですか?つまり、次のようなものを書くことができます:

-(void)leftButtonPressed:(color)sender {...}

ボタンの色を渡すには?

4

3 に答える 3

2

(UIButton *)senderid senderこれはあなたをUIButtonに型キャストしています。

はい、書くことができますが-(void)leftButtonPressed:(color)sender {...}、色は有効なクラスタイプである必要があり、次のようなポインターである必要があります-(void)leftButtonPressed:(NSColor *)sender {...}

于 2012-12-14T11:52:09.717 に答える
1

incompatible pointer type ....「 」や「 」などの警告が表示されることがありますincompatible conversion.....これらは型キャストのエラーが原因で発生します..型(id)キャストを処理できるタイプキャスターです(ここではボタンアクション)...あなたが私の要点を理解していることを願っています.

于 2012-12-14T12:00:03.133 に答える
1

あなたは書くことができません

_label.text = sender.titleLabel.text;

送信者は id 型であり、id オブジェクトは titleLabel としてのプロパティを持たないため、最初に送信者を型キャストして、コンパイラが titleLabel という名前のプロパティを持つオブジェクトの UIButton 型であることを認識できるようにする必要があります。

送信者を直接使用する場合は、ボタンクリックイベントでのみメソッドが起動されるようにしてから、メソッドを次のように変更する必要があります

- (IBAction)leftButtonPressed:(UIButton *)sender 

その後、直接使用できます

    _label.text = sender.titleLabel.text;
于 2012-12-14T12:09:23.177 に答える