2

チェックボックスでテーブルビューを作成しています。UIButtons を使用してチェックボックスを実装しましたが、問題なくチェックおよびチェック解除できます。「すべて選択/選択解除」ボタンを作成しようとしたときに問題が発生し、これが結果のコードです。

-(IBAction)select:(id)sender{
    if (all==YES) {
        all=NO;
    }
    else {
        all=YES;
    }
    [tblPeticiones reloadData];
}

問題は、テーブルがデータをリロードしないことです。何か案が?ありがとうございます。

編集:私はこのようなデータをロードします

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  //Datos
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];

    NSString *fInicio = [dateFormatter stringFromDate:[(MAP_Gastos_CiberTRIPS *)[m objectAtIndex:indexPath.row] DEP_DATE]];
    NSString *loc = [(MAP_Gastos_CiberTRIPS *)[m objectAtIndex:indexPath.row] LOCATION];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [formatter setCurrencyCode:@"EUR"];
    [formatter setLocale:[NSLocale currentLocale]];
    NSString *precio = [formatter stringFromNumber:aux];
//Vista
    NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

    CustomTVC *cell = (CustomTVC *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil) {
        cell = [[[CustomTVC alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        //CheckBox
        UIButton *checkButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        [checkButton setFrame:CGRectMake(10, 10, 23, 23)];
        if (todos==NO) {
            [checkButton setBackgroundImage:[[UIImage imageNamed:@"checkNO.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
             checkButton.tag = 0;
        }
        else {
            [checkButton setBackgroundImage:[[UIImage imageNamed:@"checkSI.png"] str    etchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal]; 
            checkButton.tag = 1;
        } 

        [checkButton addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside];

        [cell addSubview:checkButton];
        [cell.contentView addSubview:checkButton]; 
  //fecha
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(40, 0, 70.0,tableView.rowHeight)] autorelease];
        [cell addColumn:0];
        label.tag = 1;
        label.font = [UIFont boldSystemFontOfSize:12.0];
        label.text = fInicio;
        label.textAlignment = UITextAlignmentLeft;
        label.textColor = [UIColor blackColor];
        //label.backgroundColor = [UIColor whiteColor];
        label.autoresizingMask = UIViewAutoresizingNone | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label]; 


        if (indexPath.row % 2 == 0){ 
            label.backgroundColor = [UIColor colorWithRed:233.0/255.0 
                                               green:233.0/255.0 
                                                blue:233.0/255.0 
                                               alpha:1.0]; 
        } else { 
            label.backgroundColor = [UIColor clearColor]; 

        }


        //localización
        label =  [[[UILabel alloc] initWithFrame:CGRectMake(115, 0, 75.0,tableView.rowHeight)] autorelease];
        [cell addColumn:180];
        label.tag = 2;
        label.font = [UIFont boldSystemFontOfSize:12.0];
        label.text = loc;
        label.textAlignment = UITextAlignmentLeft;
        label.textColor = [UIColor blackColor];
        //label.backgroundColor = [UIColor whiteColor];
        label.autoresizingMask = UIViewAutoresizingNone | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label];

        if (indexPath.row % 2 == 0){ 
            label.backgroundColor = [UIColor colorWithRed:233.0/255.0 
                                                green:233.0/255.0 
                                                 blue:233.0/255.0 
                                                alpha:1.0]; 
        } else { 
            label.backgroundColor = [UIColor clearColor];     
        }
    }
    return cell;
}
4

4 に答える 4

0

私は問題を見つけました。これは作業コードです:

-(IBAction)select:(id)sender{

    if (all==YES) {
        all=NO;
        [btnSelAll setBackgroundImage:[[UIImage imageNamed:@"checkSI.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal]; 

    }else {

        all=YES;
        [btnSelAll setBackgroundImage:[[UIImage imageNamed:@"checkNO.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal]; 
    }
    NSMutableArray *arrIndex = [NSMutableArray new];
    for(int i=0;i<[m count];i++) {
        [arrIndex addObject:[NSIndexPath indexPathForRow:i inSection:0]];
    }
    [self.tblPeticiones beginUpdates];
    [tblPeticiones reloadRowsAtIndexPaths:arrIndex withRowAnimation:UITableViewRowAnimationNone];
    [self.tblPeticiones endUpdates]; 
    [tblPeticiones reloadData];
}
于 2012-12-19T15:26:11.780 に答える
0

コードに関するいくつかのコメント:

  • allボタンが押されたときに値を切り替えるというグローバル変数があるようです。ただし、 cellForRowAtIndexPath 内では、 という別のグローバル変数の値を確認しますtodos。これらの変数の間に何らかの関連はありますか?
  • 新しいセルを作成するときに、チェックボックスの背景画像のみを変更します。セルはリサイクルされるため、このコードを外に移動する必要がありif (cell == nil)ます。つまり、後で、リサイクルされたセルをカスタマイズする場所です。
  • かどうかのみを確認if (todos)if (!todos)、YES や NO などの値と比較しないでください。また、ブール値を切り替える最も簡単な方法はtodos = !todos:)
于 2012-12-19T15:37:11.820 に答える
0

チェックする行を配列に格納する必要があります。次に、テーブルビュー(cellForRowAtIndex内)をロード/リロードするときにこの配列をチェックして、行をチェックする必要があるかどうかを確認します。

次に、すべてを選択するか、何も選択しない場合は、それらを削除するか配列に追加して、テーブルビューをリロードします。

これを実装するのにサポートが必要な場合は、お知らせください。

于 2012-12-19T12:28:42.353 に答える
0

問題をデバッグする tableView のデータソース メソッドがリロード後に呼び出されているかどうかを確認しますか?

于 2012-12-19T12:24:27.250 に答える