0

@selector でパラメーターを渡す必要があります。セレクターを使用して呼び出す必要があるメソッドは次のとおりです。

-(void)clickedInfo:(NSString *)itemIndex{
// some work with itemIndex
}

ここで説明されているように、私にできることは中間メソッドを使用することです。

コレクションビューのcellForItemAtIndexPathメソッドでターゲットをuibuttonに追加しているため、このアプローチは私の場合には機能しません。

clickedInfo メソッドに渡す必要があるパラメーターは indexPath.row で、中間メソッドでこのパラメーターを取得できません。

事前にサンクス

4

3 に答える 3

3

したがって、ボタンのアクションでアクセスできる情報を保存する必要があります。いくつかのオプションは次のとおりです。

  • コントロールのタグ プロパティを使用します。(整数しか格納できません)
  • UIButton をサブクラス化し、そのクラスをボタンに使用します。クラスには、情報を格納するフィールドを含めることができます。
  • 関連付けられたオブジェクト (連想参照) を使用して、オブジェクトをボタンにアタッチします。これが最も一般的な解決策です。
于 2013-05-30T22:22:04.067 に答える
2

セレクターを使用しperformSelector:withObject:てオブジェクトを渡すことができます。

例:

[self performSelector:@selector(clickedInfo:) withObject:myIndex];

- (void) clickedInfo:(NSString *)itemIndex{
// some work with itemIndex
}

@selector(clickedInfo:)編集:私が以前に持っていたものではなく、ただあるべきです。

編集: @newacct の提案を使用して、次のようなことをお勧めします。

- (UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath)indexPath
{
    button.tag = indexPath.row;
    [button performSelector:@selector(clickedInfo:)];
    // or
    [button addTarget:self action:@selector(clickedInfo:) forControlEvents:UITouchUpInside];
}

- (void) clickedInfo:(id)sender
{
    int row = sender.tag;
    // Do stuff with the button and data
}
于 2013-05-30T19:46:16.483 に答える
1

これは多くの場所で対処されていますが、そこを指摘するよりも答える方が簡単です。

[someObject performSelector:@selector(clickedInfo:) withObject:someOtherObject];

someObjectレシーバーで、someOtherObjectは渡されるパラメーターです。clickedInfo

于 2013-05-30T19:53:23.427 に答える