-2

ボタンが10個あるとしましょう。ボタンごとに、いくつかのテキストを渡したい...たとえば、ボタン1、新しいボタン2など....

私がやりたいのは、このテキストを NSLog に出力することです。

したがって、メソッドを 1 つ作成し、これをボタンに渡しました。しかし、データを渡す方法がわかりません...

[myButton addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];

-(IBAction)btnSelected:(id)sender {
    NSLog(@"btnSelected data is %@", sender);
    // I want to print some text for respective button here...    
}

しかし、私は得ていません...これを成し遂げる方法はありますか?

4

3 に答える 3

2

次のようにデータをオブジェクトに関連付けることができます。

最初にこのクラスをインポートします:#import <objc/runtime.h>

次に、次のようにキーを作成します

static char * kIndexPathAssociationKeySTR = "associated_string_key";

次に、文字列を次のように関連付けます: ** ここでは、任意のタイプのデータを次のようなボタンに関連付けることができます: NSMutableArray または NSString など**

NSString *myAttachedValue = @"This is the info I am associating with button";
objc_setAssociatedObject(self.testBtn,
                         kIndexPathAssociationKeySTR,
                         myAttachedValue,
                         OBJC_ASSOCIATION_RETAIN);

次に、ボタンイベントで呼び出したメソッドで次のようにアクセスします。

- (IBAction)btnTouched:(UIButton *)sender {
    NSString *valueIs = (NSString *)objc_getAssociatedObject(self.testBtn, kIndexPathAssociationKeySTR);
    NSLog(@"value is : %@",valueIs);

}

お役に立てば幸いです。

于 2013-07-25T12:49:39.563 に答える
2

ボタンにタグを設定する

[myButton addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
myButton.tag = 1;

タグを比較する

-(IBAction)btnSelected:(id)sender {
    UIButton *button = (UIButton *)
    if(button.tag == 1) { //do button 1 stuff
        NSLog(@"btnSelected data is %@", sender);
    }
}

また、おそらくブロックをチェックアウトし、uibutton を拡張してブロックをサポートすることもできます ( UIButton ブロックは addTarget:action:forControlEvents: method? と同等です)。

于 2013-07-25T12:50:23.317 に答える