1

私は2つのセクションを持つ動的テーブルビューを開発しています: -登録された署名 -拒否された署名

私の値はすべて、辞書内のフラグに応じて各セクションに移動します。

[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"]

0 の場合は署名が登録されていないことを意味し、それ以外の場合は登録済みであることを意味します。

しかし、私の方法で印刷のセクションを開発する方法がわかりません

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

これは私の開発です:

#pragma mark *** Common methods: Tableview delegate methods ***
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    if (section == 0)   return @"not registered signatures";
    return @"Registered signatures";
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // Return the number of rows in the section.

    if ([self.userSignatures count] > 0){
        int firmasRegistradas = 0;
        for (int i = 0; i < [self.userSignatures count]; i++) {
            if (![[[self.userSignatures objectAtIndex:i] valueForKey:@"idFirma"] isEqualToString:@"0"])
                firmasRegistradas += 1;
        }
        if (section == 0)   return [self.userSignatures count] - firmasRegistradas;
        if (section == 1)   return firmasRegistradas;
    }    
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    UILabel     *EntidadFirmante    = (UILabel *)   [cell viewWithTag:2];
    UILabel     *statusFirma        = (UILabel *)   [cell viewWithTag:3];

    if ([self.userSignatures count] > 0) {
        EntidadFirmante.text    = [[self.userSignatures objectAtIndex:indexPath.row]objectForKey:@"titFirmante"];
        statusFirma.text        = [[self.userSignatures objectAtIndex:indexPath.row]objectForKey:@"idDoc"];

        cell.accessoryType      = UITableViewCellAccessoryDisclosureIndicator;

        NSLog(@"idFirma: %@",[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"]);

        if (indexPath.section == 0 && [[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"] isEqualToString:@"0"]) return cell;
        else
        if (indexPath.section == 1 && ![[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"] isEqualToString:@"0"]) return cell;

    }
    else{
        EntidadFirmante.text    = @"There's no signatures";
        statusFirma.text        = @"without signatures";

        cell.accessoryType      = UITableViewCellAccessoryNone;
    }
    return cell;
}

キーはここにあります:

if (indexPath.section == 0 && [[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"] isEqualToString:@"0"]) return cell;
else
if (indexPath.section == 1 && ![[[self.userSignatures objectAtIndex:indexPath.row] objectForKey:@"idFirma"] isEqualToString:@"0"]) return cell;

このようなリストがある場合

  1. 登録済み
  2. 登録済み
  3. 未登録
  4. 登録済み

私は次のようなものを期待しています:

登録署名: 1. 2. 4.

未登録の署名 3.

しかし、これまでのところ私はこのようなものを得ます

登録署名: 1. 2. 4.

未登録の署名 1. (登録済み)

登録されていない署名が 3 番目の署名である場合、最初の署名 (登録済み) が印刷されます。

私が感謝する助け

4

2 に答える 2

1

セクションが変更されると、indexPath がリセットされます。行数を正しく識別していますが、登録済みデータと未登録データの両方が同じ配列にあるため、未登録セクションのインデックス 1 にデータが表示されています。そのため、行数が 1 のセクションでは、配列のインデックス 1 にデータが表示されます。

これはいくつかの方法で修正できます。データを登録済み配列と未登録配列に分けることができます。または、登録されていないデータの正しいインデックスを識別し、それを objectAtIndexPath メソッドに渡すことができます。

また、メソッドでセルを構成すると、コードがずっときれいになります。

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

}

それ以外のcellForRowAtIndexPath:

于 2013-09-10T00:25:16.733 に答える
0

最後に、WeekendCodeWarrior の提案のおかげで機能するようになりました。これが私のコードです。

#pragma mark *** UITableviewDelegate ***
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 2;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    //Devuelve el título que tendrá cada sección
    if (section == 0)   return @"not registered signatures";
    return @"Registered signatures";
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // Return the number of rows in the section.
    registeredSignatures    = [[NSMutableArray alloc]init];
    unregisteredSignatures  = [[NSMutableArray alloc]init];

    for (int i = 0; i < [self.userSignatures count]; i++) {
        if ([[[self.userSignatures objectAtIndex:i] valueForKey:@"idFirma"] isEqualToString:@"0"])
            [unregisteredSignatures addObject:[self.userSignatures objectAtIndex:i]];
        else
        if (![[[self.userSignatures objectAtIndex:i] valueForKey:@"idFirma"] isEqualToString:@"0"])
                [registeredSignatures addObject:[self.userSignatures objectAtIndex:i]];
    }


    if (section == 0)   return [unregisteredSignatures count];
    if (section == 1)   return [registeredSignatures count];
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    UILabel     *EntidadFirmante    = (UILabel *)   [cell viewWithTag:2];
    UILabel     *statusFirma        = (UILabel *)   [cell viewWithTag:3];

    if ([self.userSignatures count] > 0) {
        cell.accessoryType      = UITableViewCellAccessoryDisclosureIndicator;

        if (indexPath.section == 0) {
            EntidadFirmante.text    = [[unregisteredSignatures objectAtIndex:indexPath.row]objectForKey:@"titFirmante"];
            statusFirma.text        = [[unregisteredSignatures objectAtIndex:indexPath.row]objectForKey:@"idDoc"];    
        }

        else
            if (indexPath.section == 1) {
                EntidadFirmante.text    = [[registeredSignatures objectAtIndex:indexPath.row]objectForKey:@"titFirmante"];
                statusFirma.text        = [[registeredSignatures objectAtIndex:indexPath.row]objectForKey:@"idDoc"];
            }
    }
    else{
        EntidadFirmante.text    = @"There's no signatures";
        statusFirma.text        = @"without signatures";

        cell.accessoryType      = UITableViewCellAccessoryNone;
    }
    return cell;
}

ご支援ありがとうございます!!!

于 2013-09-10T16:44:12.127 に答える