0

クライアントのリスト (クライアントのロゴ + 名前など) を表示するテーブル ビューがあり、同時に各クライアントに関する特定の情報 (概要など) にリンクする 4 つのボタンを作成しました。

これらのボタンをクリックすると、すべてが適切に機能し、対応する適切なviewui情報が表示されます。

問題は、すべてをアルファベット順にソートするときです。ボタンが以前の順序にリンクしていることを除いて、すべてが適切に並べ替えられます (会社名など) indexPath.row。そのため、アルファ リストのクライアント 1 をクリックすると、正しい最初のクライアントの情報が表示されます。文字 B の下にある最初のクライアントをクリックします...リスト A に最初のクライアントの情報が表示されます...そのため、ボタンのインデックスパスはまったくソートされません....

これが私のコードです:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

NSIndexPath *offsetPath = [self modelRowIndexForIndexPath:indexPath];
        //NSLog(@"Requested: %@  --  Off: %@",indexPath,offsetPath);



    RMCustomClientCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ClientCell"];

    RMClients *client;

    if(!self.alphaMode){


        client = [self.clients objectAtIndex:indexPath.row];

    } else {

        NSString *key = [self.alphaKeys objectAtIndex:offsetPath.section];
        NSArray *specificClients = [self.sortedClients objectForKey:key];
        client = [specificClients objectAtIndex:offsetPath.row];


    }


cell.extraDetailsButton.tag = indexPath.row;
cell.overviewDetailsButton.tag = indexPath.row;
cell.listDetailsButton.tag = indexPath.row;
cell.eventsDetailsButton.tag = indexPath.row;


    cell.nameLabel.text = client.name;


    return cell;

}

これを修正するにはどうすればよいですかcell.extraDetailsButton.tag = indexPath.row;(indexPath.row) は、別のものに置き換える必要があります。

4

2 に答える 2

0

それぞれに対してオフセットなどを行うことcellForRowAtIndexPathは非効率的であり、エラーが発生しやすくなります (ご存じのとおり)。代わりに、テーブルビューの並べ替え方法を変更するときは、self.clients の並べ替えを変更して、インデックスが常にテーブルと一致するようにします。これを行うと、次のようにボタン ロジックをかなり単純化できます。

ボタンに 4 つのタグを定義します。

#define BUTTON0_TAG 100
#define BUTTON1_TAG 101
#define BUTTON2_TAG 102
#define BUTTON3_TAG 103

ボタンをこのメソッドにバインドします。

- (void)buttonAction:(UIButton *)sender {
    UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

    switch (sender.tag) {
       case BUTTON0_TAG:
          [self detailsForClientAtIndexPath:indexPath];
          break;
       case BUTTON1_TAG:
          [self overviewForClientAtIndexPath:indexPath];
          break;
       case BUTTON2_TAG:
          [self listForClientAtIndexPath:indexPath];
          break;
       case BUTTON3_TAG:
          [self eventsForClientAtIndexPath:indexPath];
          break;
    }
}
于 2013-03-13T20:58:30.443 に答える