0

TableViewがあり、カスタムTableCellを使用しています。TableCellにはボタンがあります。TableViewで、[チェック]ボタンが選択されているかどうかを確認するためのブール値を作成しました。問題は、テーブルをスクロールするとセルが再利用されるため、ボタンが自動的に選択解除されることです。

    if (checkButton.selected==NO) {
        NSLog(@"ooo");
        checkButton.selected=YES;
        checkSelected=YES;
   }
    else {
        NSLog(@"Okkkkk");
       checkButton.selected=NO;
       checkSelected=NO;
    }

私はBOOlのカスタムプロパティでUIButtonをサブクラス化する考えを持っています。しかし、私はトレーニングすることを知りません。誰かが私を助けることができますか?

4

3 に答える 3

0
@interface CustomButton : UIButton
@property(nonatomic) BOOL isSelected;
// DO NOT FORGET TO SYNTHESIZE MY isSelected
@end

カスタムセルを使用しているためです。カスタムセルにプロパティCustomButtonを作成するだけです。

@interface YourCustomCell : UITableViewCell
@property(nonatomic, strong) CustomButton *button;
@end

cellForRowAtIndexPathメソッドで

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

   YourCustomCell *cell = (YourCustomCell*)[tableView dequeueReusableCellWithIdentifier:cellType];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:cellType owner:nil options:nil];
        cell = (YourCustomCell*)[nib objectAtIndex:0];
    }
    //you can add a target to your button here
    cell.button addTarget:self action:@selector(changeButtonState:).....
    if(cell.button.isSelected == YES)
          NSLog(@"selected");
    else
          NSLog(@"not selected");


-(void)changeButtonState:(CustomButton*)button
{
   if(button.isSelected) button.isSelected = NO;
   else                  button.isSelected = YES;
   [yourTableView reloadData];
}
于 2012-10-30T07:26:49.293 に答える
0
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%i%i",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
    else
    {
        NSArray *cellSubs = cell.contentView.subviews;
        for (int i = 0 ; i < [cellSubs count] ; i++)
        {
            [[cellSubs objectAtIndex:i] removeFromSuperview];
        }
    }

    UICheckBox *checkBox = [[UICheckBox alloc] initWithFrame:CGRectMake(0, 0, 44.0, 44.0)];
    checkBox.tag = indexPath.row;
    checkBox.titleLabel.tag = indexPath.section;
    [checkBox addTarget:self action:@selector(checkBoxPressed:) forControlEvents:UIControlEventTouchUpInside];
    for (NSIndexPath *temp in selectedObjects) {
        if ([temp isEqual: indexPath]) {
            checkBox.selected = TRUE;
        }
    }
    [cell.contentView addSubview:checkBox];

    return cell;
}

-(void)checkBoxPressed:(UICheckBox*)sender
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag inSection:sender.titleLabel.tag];
    if (sender.selected) 
        [selectedObjects removeObject:indexPath];
    else
        [selectedObjects addObject:indexPath];
    sender.selected = !sender.selected;
    NSLog(@"\n\n%@",selectedObjects);
}

これselectedObjectsはグローバルNSArrayUICheckBoxあり、のサブクラスですUIButton

于 2012-10-30T07:29:40.373 に答える
0

配列を使用して、選択されたボタンを追跡できます。ボタンが選択されたときに、特定のインデックスに値 1 を設定するだけです。選択を解除するときは 0 に設定します。

次に、セルの作成中に、次のようにチェックインできます。

if ([[arr_Check objectAtIndex:indexPath.row] isEqualToString:@"0"])
    checkButton.selected=NO;
else
    checkButton.selected=YES;
于 2012-10-30T07:22:55.720 に答える